Paso 6 (2)- Trayectorias de hospitalización y mortalidad con foco en condiciones vinculadas a trastornos de salud mental y consumo de sustancias posterior a un primer ingreso por alguno de estos trastornos, en usuarios/as jóvenes y adultos emergentes de población general y pertenecientes a pueblos originarios, 2018-2021, Chile

Análisis de sensibilidad para resolución trimestral, utilizando una solución con una mayor cantidad de conglomerados.

Autor/a

Andrés González Santa Cruz

Fecha de publicación

15 de may, 2025

Configurar

Código
# remover objetos y memoria utilizada
rm(list=ls());gc()
          used (Mb) gc trigger (Mb) max used (Mb)
Ncells  599031 32.0    1288387 68.9   693227 37.1
Vcells 1141028  8.8    8388608 64.0  1876026 14.4
Código
#remover imágenes
while(!dev.cur())dev.off()
cat("\014")
Código
if(Sys.info()["sysname"]=="Windows"){
 folder_path <- ifelse(dir.exists("H:/Mi unidad/PERSONAL ANDRES/UCH_salud_publica/asignaturas/un_inv_II/"),
                       "H:/Mi unidad/PERSONAL ANDRES/UCH_salud_publica/asignaturas/un_inv_II/",
                       ifelse(dir.exists("H:/My drive/PERSONAL ANDRES/UCH_salud_publica/asignaturas/un_inv_II/"),
                       "H:/My drive/PERSONAL ANDRES/UCH_salud_publica/asignaturas/un_inv_II/",
                       "C:/Users/CISS Fondecyt/Mi unidad/Alvacast/SISTRAT 2022 (github)/_proposal_grant/2023/"))
} else {folder_path <- ""}
load(paste0(folder_path,"avance250117_25.RData"))

Paquetes estadísticos

Código
#elegir repositorio
if(Sys.info()["sysname"]=="Windows"){
  #options(repos = c(CRAN = "https://cran.dcc.uchile.cl/"))
  options(repos = c(CRAN = "https://cran.rstudio.com/"))
}
options(install.packages.check.source = "yes") # Chequea la fuente de los paquetes

#borrar caché
#system("fc-cache -f -v")

if(!require(pacman)){install.packages("pacman");require(pacman)}

pacman::p_unlock(lib.loc = .libPaths()) #para no tener problemas reinstalando paquetes

if(Sys.info()["sysname"]=="Windows"){
if (getRversion() != "4.4.1") { stop("Requiere versión de R 4.4.1. Actual: ", getRversion()) }
}

cat("quarto version: "); system("quarto --version") 
quarto version: 
[1] 0
Código
if(!require(job)){install.packages("job");require(job)}
if(!require(kableExtra)){install.packages("kableExtra");require(kableExtra)}
if(!require(tidyverse)){install.packages("tidyverse");require(tidyverse)}
if(!require(cluster)){install.packages("cluster"); require(cluster)}
if(!require(WeightedCluster)){install.packages("WeightedCluster"); require(WeightedCluster)}
if(!require(devtools)){install.packages("devtools"); require(devtools)}
if(!require(TraMineR)){install.packages("TraMineR"); require(TraMineR)}
if(!require(TraMineRextras)){install.packages("TraMineRextras"); require(TraMineRextras)}
if(!require(NbClust)){install.packages("NbClust"); require(NbClust)}
if(!require(haven)){install.packages("haven"); require(haven)}
if(!require(ggseqplot)){install.packages("ggseqplot"); require(ggseqplot)}
if(!require(grid)){install.packages("grid"); require(grid)}
if(!require(gridExtra)){install.packages("gridExtra"); require(gridExtra)}
if(!require(Tmisc)){install.packages("Tmisc"); require(Tmisc)}
if(!require(factoextra)){install.packages("factoextra"); require(factoextra)}
if(!require(stargazer)){install.packages("stargazer"); require(stargazer)}
if(!require(gtsummary)){install.packages("gtsummary"); require(gtsummary)}
if(!require(lmtest)){install.packages("lmtest"); require(lmtest)}
if(!require(emmeans)){install.packages("emmeans"); require(emmeans)}
if(!require(fpp2)){install.packages("fpp2"); require(fpp2)}
if(!require(purrr)){install.packages("purrr"); require(purrr)}
if(!require(forecast)){install.packages("forecast"); require(forecast)}
if(!require(magrittr)){install.packages("magrittr"); require(magrittr)}
if(!require(foreach)){install.packages("foreach"); require(foreach)}
if(!require(doParallel)){install.packages("doParallel"); require(doParallel)}
if(!require(progressr)){install.packages("progressr"); require(progressr)}
if(!require(chisq.posthoc.test)){devtools::install_github("ebbertd/chisq.posthoc.test")}
if(!require(rstatix)){install.packages("rstatix"); require(rstatix)}
if(!require(rio)){install.packages("rio"); require(rio)}
if(!require(cowplot)){install.packages("cowplot"); require(cowplot)}
if(!require(DiagrammeR)){install.packages("DiagrammeR"); require(DiagrammeR)}
if(!require(DiagrammeRsvg)){install.packages("DiagrammeRsvg"); require(DiagrammeRsvg)}
if(!require(rsvg)){install.packages("rsvg"); require(rsvg)}
if(!require(survminer)){install.packages("survminer"); require(survminer)}
if(!require(epitools)){install.packages("epitools"); require(epitools)}
if(!require(biostat3)){install.packages("biostat3"); require(biostat3)}

Resultados

1. Trimestral

1.2. Sensibilidad= PAM (OM), sol 6 cluster- diagnósticos

Código
invisible("Me da buena: 0,61 en promedio. Se mantiene. El problema está con 5710 es negativo")
sil_pam_om_clus6_q_nostd<-
  silhouette(as.integer(pamRange_quarter_om$clustering$cluster6), as.dist(dist_quarter_om))

# Crear etiquetas personalizadas
cluster_labels6 <- paste0("Cluster ", 
          seq_along(attr(summary(sil_pam_om_clus6_q_nostd)$clus.avg.widths, "dimnames")[[1]]), 
          ":\nAWS ", sprintf("%1.2f",summary(sil_pam_om_clus6_q_nostd)$clus.avg.widths))

# Graficar con etiquetas personalizadas
fviz_silhouette(
  sil_pam_om_clus6_q_nostd, 
  lab.clusters = cluster_labels6, # Etiquetas personalizadas para los clústeres
  print.summary=F) +
  scale_fill_grey(start = 0.2, end = 0.8, labels = cluster_labels6) +  # Escala de grises
  scale_color_grey(start = 0.2, end = 0.8, labels = cluster_labels6)+   # Escala de grises para los bordea
  ggtitle(NULL)+
  labs(y="Ancho medio de la silueta", x="Conglomerados")# Elimina el título

Código
ggsave("_figs/sil_plot_pam_om6_q_25.png", width = 8, height = 5, dpi = 500)
Código
tabla_conteo15 <- table(pamRange_quarter_om$clustering$cluster6, 
                      pamRange_quarter_om$clustering$cluster4)

# Proporción por fila
tabla_prop_fila15 <- prop.table(tabla_conteo15, 1)

# Proporción por columna
tabla_prop_col15 <- prop.table(tabla_conteo15, 2)

# Redondear ambas
tabla_prop_fila15 <- sprintf("%1.1f", tabla_prop_fila15*100)
tabla_prop_col15 <- sprintf("%1.1f", tabla_prop_col15*100)

# Combinar ambas proporciones en el formato "fila / col"
tabla_combinada15 <- matrix(
  paste0(tabla_prop_fila15, " / ", tabla_prop_col15),
  nrow = nrow(tabla_conteo15),
  ncol = ncol(tabla_conteo15),
  dimnames = dimnames(tabla_conteo15)
)


# Convertir la tabla a un formato limpio con kable
tabla_combinada15 |> 
  data.frame() |> 
  dplyr::select(`X6623`, `X6612`, `X6522`, `X6574`) |> 
  kable(
    caption = "Porcentajes de Clusters (por fila / por columna), Solución de 6 vs. 4 conglomerados", 
    col.names = c("6623, Un trimestre, TSM(4)", 
                  "6612, Un trimestre, TUS(4)", 
                  "6522, Un semestre TSM(2)", 
                  "6574, Comorbilidad un trimestre(3)"
                  ), 
    align = "c"
  ) |> 
  kable_classic() |> 
  footnote(
    general = "6268= TSM, 1 año después, TSM; 6522= Un semestre TSM; 6574= Comorbilidad un trimestre; 6612= Un trimestre, TUS; 6623= Un trimestre, TSM; 6624= TSM, 1 año después, otras causas",
    general_title = "Nota:",
    footnote_as_chunk = TRUE,
    escape = FALSE
  )
Porcentajes de Clusters (por fila / por columna), Solución de 6 vs. 4 conglomerados
6623, Un trimestre, TSM(4) 6612, Un trimestre, TUS(4) 6522, Un semestre TSM(2) 6574, Comorbilidad un trimestre(3)
6268 73.0 / 2.4 2.3 / 0.5 21.8 / 9.5 2.9 / 2.2
6522 0.0 / 0.0 0.0 / 0.0 100.0 / 89.7 0.0 / 0.0
6574 0.0 / 0.0 0.0 / 0.0 0.0 / 0.0 100.0 / 97.8
6612 0.0 / 0.0 100.0 / 99.5 0.0 / 0.0 0.0 / 0.0
6623 100.0 / 93.1 0.0 / 0.0 0.0 / 0.0 0.0 / 0.0
6624 98.7 / 4.5 0.0 / 0.0 1.3 / 0.8 0.0 / 0.0
Nota: 6268= TSM, 1 año después, TSM; 6522= Un semestre TSM; 6574= Comorbilidad un trimestre; 6612= Un trimestre, TUS; 6623= Un trimestre, TSM; 6624= TSM, 1 año después, otras causas

Vemos los diagnósticos que vienen después de aquellos cluster con más de un ingreso.

Código
diag_pam_om6_q_6624<-
df_filled2|> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6624", clus_pam_om6))$run)|> 
  dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo)|> 
  dplyr::group_by(run)|> 
  dplyr::filter(row_number() != 1)|> # Elimina la primera observación de cada run
  dplyr::mutate(
    all_diags = paste(na.omit(c(diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11)), collapse = ", ")
  )|> 
  dplyr::summarise(
    all_diags = first(all_diags),
    fecha_egreso_rec_fmt = first(fecha_egreso_rec_fmt),
    estab_homo = first(estab_homo)
  )|> 
  dplyr::ungroup()|>  
  dplyr::pull(all_diags)|># Extraer la columna all_diags como vector
  strsplit(split = ", ")|> # Separar cada diagnóstico por comas
  unlist()  # Convertir la lista en un vector
invisible("head(arrange(data.frame(table(diag_pam_om6_q_6624)) |> mutate(across(1, as.character)), -Freq),10) |> dput()")
invisible("Para chatgpt= estos son códigos de CIE-10, descríbeme brevemente cada uno en markdown en formato 'Cód. CIE-10 (n=Freq) - [descripción] '")

Entre quienes se encontraron ingresados en el sistemas por TSM, y luego de un año son ingresados por otras causas, esas causas posteriores abarcan principalmente:

  • F19.2 (n=26) - Trastornos mentales y del comportamiento debido al uso de múltiples drogas y al uso de otras sustancias psicoactivas: síndrome de dependencia.
  • E10.1 (n=25) - Diabetes mellitus tipo 1 con cetoacidosis.
  • O00.8 (n=19) - Otros embarazos ectópicos.
  • F60.9 (n=18) - Trastorno de la personalidad, no especificado.
  • Z51.8 (n=18) - Encuentro para otro tipo de atención posterior especificada.
  • N39.0 (n=17) - Infección del tracto urinario, sitio no especificado.
  • Z37.0 (n=17) - Nacimiento único vivo.
  • F60.3 (n=16) - Trastorno de la personalidad borderline.
  • G40.9 (n=15) - Epilepsia, no especificada.
  • F32.2 (n=13) - Trastorno depresivo mayor, episodio único, grave, sin características psicóticas.
Código
diag_pam_om7_q_6268<-
df_filled2|>
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6268", clus_pam_om6))$run)|>
  dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo)|> 
  dplyr::group_by(run)|> 
  dplyr::filter(row_number() != 1)|> # Elimina la primera observación de cada run
  dplyr::mutate(
    all_diags = paste(na.omit(c(diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11)), collapse = ", ")
  )|> 
  dplyr::summarise(
    all_diags = first(all_diags),
    fecha_egreso_rec_fmt = first(fecha_egreso_rec_fmt),
    estab_homo = first(estab_homo)
  )|> 
  dplyr::ungroup()|>  
  dplyr::pull(all_diags)|># Extraer la columna all_diags como vector
  strsplit(split = ", ")|> # Separar cada diagnóstico por comas
  unlist()  # Convertir la lista en un vector
invisible("head(arrange(data.frame(table(diag_pam_om7_q_6268)) |> mutate(across(1, as.character)), -Freq),10) |> dput()")
invisible("Para chatgpt= estos son códigos de CIE-10, descríbeme brevemente cada uno en markdown en formato 'Cód. CIE-10 (n=Freq) - [descripción] '")

Entre las trayectorias que ingresaron por trastornos de salud mental, y posteriormente reingreesaron por las mismas causas un año después (5710), estas son las principales causas por las que reingresan posteriormente:

  • F60.3 (n=77) - Trastorno de la personalidad emocionalmente inestable (trastorno límite de la personalidad).
  • F60.9 (n=59) - Trastorno de la personalidad, no especificado.
  • F32.9 (n=55) - Trastorno depresivo mayor, episodio único, no especificado.
  • F32.2 (n=54) - Trastorno depresivo mayor, episodio único, grave, sin características psicóticas.
  • F20.9 (n=44) - Esquizofrenia, no especificada.
  • F20.0 (n=43) - Esquizofrenia paranoide.
  • F31.9 (n=43) - Trastorno bipolar, no especificado.
  • F19.2 (n=36) - Trastornos mentales y del comportamiento debido al uso de múltiples drogas y al uso de otras sustancias psicoactivas: síndrome de dependencia.
  • C49.9 (n=29) - Neoplasia maligna del tejido conectivo y de tejidos blandos, no especificado.
  • G90.9 (n=21) - Trastorno del sistema nervioso autónomo, no especificado.
Código
diag_pam_om7_q_6522<-
df_filled2|>
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6522", clus_pam_om6))$run)|>
  dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo)|> 
  dplyr::group_by(run)|> 
  dplyr::filter(row_number() != 1)|> # Elimina la primera observación de cada run
  dplyr::mutate(
    all_diags = paste(na.omit(c(diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11)), collapse = ", ")
  )|> 
  dplyr::summarise(
    all_diags = first(all_diags),
    fecha_egreso_rec_fmt = first(fecha_egreso_rec_fmt),
    estab_homo = first(estab_homo)
  )|> 
  dplyr::ungroup()|>  
  dplyr::pull(all_diags)|># Extraer la columna all_diags como vector
  strsplit(split = ", ")|> # Separar cada diagnóstico por comas
  unlist()  # Convertir la lista en un vector
invisible("head(arrange(data.frame(table(diag_pam_om7_q_6522)) |> mutate(across(1, as.character)), -Freq),10) |> dput()")
invisible("Para chatgpt= estos son códigos de CIE-10, descríbeme brevemente cada uno en markdown en formato 'Cód. CIE-10 (n=Freq) - [descripción] '")

Entre quienes experimentaron una trayectoria conssitente en ingresar por trastornos de salud mental, y luego de 6 meses reingresar por las mismas causas, (5935), se encuentran los siguientes diagnósticos al reingreso:

  • F32.9 (n=102) - Trastorno depresivo mayor, episodio único, no especificado.
  • F32.2 (n=98) - Trastorno depresivo mayor, episodio único, grave, sin características psicóticas.
  • F60.9 (n=71) - Trastorno de la personalidad, no especificado.
  • F20.9 (n=59) - Esquizofrenia, no especificada.
  • F60.3 (n=58) - Trastorno de la personalidad emocionalmente inestable (trastorno límite de la personalidad).
  • F31.9 (n=42) - Trastorno bipolar, no especificado.
  • F19.2 (n=39) - Trastornos mentales y del comportamiento debido al uso de múltiples drogas y al uso de otras sustancias psicoactivas: síndrome de dependencia.
  • F32.3 (n=35) - Trastorno depresivo mayor, episodio único, grave, con características psicóticas.
  • F20.0 (n=34) - Esquizofrenia paranoide.
  • F43.2 (n=27) - Trastorno por estrés postraumático (TEPT).
Código
# Trastornos mentales orgánicos: F00.0-F09.9 (F000 a F099)
in_organic <- Vectorize(function(codigo) {
  if (is.na(codigo)) return(FALSE)
  grepl("^F0[0-9]", codigo)
})

# Trastornos por uso de sustancias: F10.0-F19.9 (F10 a F19)
in_substance <- Vectorize(function(codigo) {
  if (is.na(codigo)) return(FALSE)
  grepl("^F1[0-9]", codigo)
})

# Esquizofrenia: F20.0-F20.9 (F20)
in_esquizofrenia <- Vectorize(function(codigo) {
  if (is.na(codigo)) return(FALSE)
  grepl("^F20", codigo)
})

# Otros trastornos psicóticos no afectivos: F21.0-F29.9 (F21 a F29)
in_otros_psicoticos <- Vectorize(function(codigo) {
  if (is.na(codigo)) return(FALSE)
  grepl("^F2[1-9]", codigo)
})

# Trastornos bipolares: F30.0-F31.9 (F30 o F31)
in_bipolares <- Vectorize(function(codigo) {
  if (is.na(codigo)) return(FALSE)
  grepl("^(F30|F31)", codigo)
})

# Trastornos depresivos y otros del estado de ánimo: F32.0-F39.9 (F32 a F39)
in_depresivos <- Vectorize(function(codigo) {
  if (is.na(codigo)) return(FALSE)
  grepl("^F3[2-9]", codigo)
})

# Trastornos de ansiedad: F40.0-F49.9 (F40 a F49)
in_ansiedad <- Vectorize(function(codigo) {
  if (is.na(codigo)) return(FALSE)
  grepl("^F4[0-9]", codigo)
})

# Trastornos de la personalidad: F60.0-F69.9 (F60 a F69)
in_personalidad <- Vectorize(function(codigo) {
  if (is.na(codigo)) return(FALSE)
  grepl("^F6[0-9]", codigo)
})

# LESIONES AUTOINFLIGIDAS INTENCIONALMENTE (X60-X84)
in_lesiones <- Vectorize(function(codigo) {
  if (is.na(codigo)) return(FALSE)
  grepl("^X6[0-9]|^X7[0-9]|^X8[0-4]", codigo)
})

#Mortier, P., Conde, S., Alayo, I., Amigo, F., Ballester, L., Amell, R. C., Guinart, D., Contaldo, S. F., Ferrer, M., Leis, A., Mayer, M. A., Portillo-Van Diest, A., Puértolas-Gracia, B., Ramírez-Anguita, J. M., Peña-Salazar, C., Sanz, F., Kessler, R. C., Palao, D., Sola, V. P., . . .  Alonso, J. (2024). Premature Death, Suicide, and Nonlethal Intentional Self-Harm After Psychiatric Discharge. JAMA Network Open, 7(6), e2417131. https://doi.org/10.1001/jamanetworkopen.2024.17131
in_lesiones_amplio <- Vectorize(function(codigo) {
  if (is.na(codigo)) return(FALSE)
  grepl("^(T3[6-9]|T4[0-9]|T5[0-9]|T6[0-5])", codigo)
})

agregar_columnas_icd <- function(df) {
  # Especificamos las columnas de diagnóstico
  diag_cols <- paste0("diag", 1:11)
  
  df |>
    mutate(
      organic = rowSums(across(all_of(diag_cols), ~ in_organic(.))) > 0,
      substance = rowSums(across(all_of(diag_cols), ~ in_substance(.))) > 0,
      esquizofrenia = rowSums(across(all_of(diag_cols), ~ in_esquizofrenia(.))) > 0,
      otros_psicoticos = rowSums(across(all_of(diag_cols), ~ in_otros_psicoticos(.))) > 0,
      bipolares = rowSums(across(all_of(diag_cols), ~ in_bipolares(.))) > 0,
      depresivos = rowSums(across(all_of(diag_cols), ~ in_depresivos(.))) > 0,
      ansiedad = rowSums(across(all_of(diag_cols), ~ in_ansiedad(.))) > 0,
      personalidad = rowSums(across(all_of(diag_cols), ~ in_personalidad(.))) > 0, 
      lesiones= rowSums(across(all_of(diag_cols), ~in_lesiones(.)))> 0,
      lesiones_amplio= rowSums(across(all_of(diag_cols), ~in_lesiones_amplio(.)))> 0
    )
}

#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_

first_episode_rec_c6<-
agregar_columnas_icd(first_episode)
  
tot_cie10_clas_c6<-
rbind.data.frame(
  format_table_vec(table(factor(first_episode_rec_c6$organic, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_rec_c6$substance, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_rec_c6$esquizofrenia, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_rec_c6$otros_psicoticos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_rec_c6$bipolares, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_rec_c6$depresivos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_rec_c6$ansiedad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_rec_c6$personalidad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_rec_c6$lesiones, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_rec_c6$lesiones_amplio, levels = c(FALSE, TRUE))))
  )|>
    (\(df) {
  colnames(df) <- c("FALSE", "TRUE"); rownames(df)<-NULL; df
      })()
#         FALSE        TRUE
# 1 4858 (80.5) 1180 (19.5)
# 2 5612 (92.9)   426 (7.1)
# 3 5645 (93.5)   393 (6.5)
# 4 5652 (93.6)   386 (6.4)
# 5 4215 (69.8) 1823 (30.2)
# 6 5072 (84.0)  966 (16.0)
# 7 4903 (81.2) 1135 (18.8)
# 

second_episode_rec_c6<-
agregar_columnas_icd(second_episode)
  
tot_cie10_clas_2nd_c6<-
rbind.data.frame(
  format_table_vec(table(factor(second_episode_rec_c6$organic, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_rec_c6$substance, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_rec_c6$esquizofrenia, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_rec_c6$otros_psicoticos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_rec_c6$bipolares, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_rec_c6$depresivos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_rec_c6$ansiedad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_rec_c6$personalidad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_rec_c6$lesiones, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_rec_c6$lesiones_amplio, levels = c(FALSE, TRUE))))
  )|>
    (\(df) {
  colnames(df) <- c("FALSE", "TRUE"); rownames(df)<-NULL; df
      })()

cat(paste0("Second episodes: ", 
df_filled2 |> 
    dplyr::filter(run %in% ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$run) |> 
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::filter(row_number() == 2)|>
    dplyr::ungroup() |> nrow()
),"\n")
Second episodes: 3117 
Código
#:#:#:#:#:#:#:#:#:#:
cat("2025-04-26: TSM 1 semestre")
2025-04-26: TSM 1 semestre
Código
first_episode_1_trim_tsm_c6<-
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6623", clus_pam_om6))$run) |> 
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::filter(row_number() == 1)|>
    dplyr::ungroup()
second_episode_1_trim_tsm_c6<-
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6623", clus_pam_om6))$run) |> 
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::filter(row_number() == 2)|>
    dplyr::ungroup()

cat(paste0("Second episodes, First quarter, MH: ", nrow(second_episode_1_trim_tsm_c6),"\n"))
Second episodes, First quarter, MH: 1956
Código
#:#:#:#:#:#:#:#:#:#:
cat("2025-03-01: TSM 1 semestre")
2025-03-01: TSM 1 semestre
Código
first_episode_tsm_1_sem_tsm_c6<-
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6522", clus_pam_om6))$run) |> 
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::filter(row_number() == 1)|>
    dplyr::ungroup()
second_episode_tsm_1_sem_tsm_c6<-
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6522", clus_pam_om6))$run) |> 
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::filter(row_number() == 2)|>
    dplyr::ungroup()

cat(paste0("Second episodes, First semester, MH: ", nrow(second_episode_tsm_1_sem_tsm_c6),"\n"))
Second episodes, First semester, MH: 333
Código
#:#:#:#:#:#:#:#:#:#:
cat("2025-03-01: Comorbilidad")
2025-03-01: Comorbilidad
Código
first_episode_com_c6<-
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6574", clus_pam_om6))$run) |> 
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::filter(row_number() == 1)|>
    dplyr::ungroup()
second_episode_com_c6<-
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6574", clus_pam_om6))$run) |> 
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::filter(row_number() == 2)|>
    dplyr::ungroup()

cat(paste0("Second episodes, First quarter, Comorbidity: ", nrow(second_episode_com_c6),"\n"))
Second episodes, First quarter, Comorbidity: 128
Código
#:#:#:#:#:#:#:#:#:#:
cat("2025-04-26: TUS")
2025-04-26: TUS
Código
first_episode_tus_c6<-
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6612", clus_pam_om6))$run) |> 
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::filter(row_number() == 1)|>
    dplyr::ungroup()
second_episode_tus_c6<-
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6612", clus_pam_om6))$run) |> 
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::filter(row_number() == 2)|>
    dplyr::ungroup()

cat(paste0("Second episodes, First quarter, SUD: ", nrow(second_episode_tus_c6),"\n"))
Second episodes, First quarter, SUD: 289
Código
#:#:#:#:#:#:#:#:#:#:
cat("2025-04-26: TSM, 1 año, TSM")
2025-04-26: TSM, 1 año, TSM
Código
first_episode_tsm_1yr_tsm_c6<-
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6268", clus_pam_om6))$run) |> 
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::filter(row_number() == 1)|>
    dplyr::ungroup()
second_episode_tsm_1yr_tsm_c6<-
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6268", clus_pam_om6))$run) |> 
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::filter(row_number() == 2)|>
    dplyr::ungroup()
cat(paste0("Second episodes, MH, 1 yr. later, MH: ", nrow(second_episode_tsm_1yr_tsm_c6),"\n"))
Second episodes, MH, 1 yr. later, MH: 172
Código
#:#:#:#:#:#:#:#:#:#:
cat("2025-04-26: TSM, 1 año, otros")
2025-04-26: TSM, 1 año, otros
Código
first_episode_tsm_1yr_otro_c6<-
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6624", clus_pam_om6))$run) |> 
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::filter(row_number() == 1)|>
    dplyr::ungroup()
second_episode_tsm_1yr_otro_c6<-
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6624", clus_pam_om6))$run) |> 
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::filter(row_number() == 2)|>
    dplyr::ungroup()

cat(paste0("Second episodes, MH, 1 yr. later, other causes: ", nrow(second_episode_tsm_1yr_otro_c6),"\n"))
Second episodes, MH, 1 yr. later, other causes: 239
Código
#:#:#:#:#:#:#:#:#:#:
#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:
#:#:#:#:#:#:#:#:#:#:

first_episode_1_trim_tsm_rec_c6<-
agregar_columnas_icd(first_episode_1_trim_tsm_c6)

prim_trim_tsm_clas_c6<-
rbind.data.frame(
  format_table_vec(table(factor(first_episode_1_trim_tsm_rec_c6$organic, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_1_trim_tsm_rec_c6$substance, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_1_trim_tsm_rec_c6$esquizofrenia, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_1_trim_tsm_rec_c6$otros_psicoticos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_1_trim_tsm_rec_c6$bipolares, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_1_trim_tsm_rec_c6$depresivos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_1_trim_tsm_rec_c6$ansiedad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_1_trim_tsm_rec_c6$personalidad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_1_trim_tsm_rec_c6$lesiones, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_1_trim_tsm_rec_c6$lesiones_amplio, levels = c(FALSE, TRUE))))
)|>
    (\(df) {
  colnames(df) <- c("FALSE", "TRUE"); rownames(df)<-NULL; df
      })()
#          FALSE        TRUE
# 1  4802 (98.3)    83 (1.7)
# 2  4587 (93.9)   298 (6.1)
# 3  4543 (93.0)   342 (7.0)
# 4  4554 (93.2)   331 (6.8)
# 5  4535 (92.8)   350 (7.2)
# 6  3160 (64.7) 1725 (35.3)
# 7  3944 (80.7)  941 (19.3)
# 8  3875 (79.3) 1010 (20.7)
# 9  4687 (95.9)   198 (4.1)
# 10 4661 (95.4)   224 (4.6)


second_episode_1_trim_tsm_rec_c6<-
agregar_columnas_icd(second_episode_1_trim_tsm_c6)

second_trim_tsm_clas_c6<-
rbind.data.frame(
  format_table_vec(table(factor(second_episode_1_trim_tsm_rec_c6$organic, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_1_trim_tsm_rec_c6$substance, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_1_trim_tsm_rec_c6$esquizofrenia, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_1_trim_tsm_rec_c6$otros_psicoticos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_1_trim_tsm_rec_c6$bipolares, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_1_trim_tsm_rec_c6$depresivos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_1_trim_tsm_rec_c6$ansiedad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_1_trim_tsm_rec_c6$personalidad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_1_trim_tsm_rec_c6$lesiones, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_1_trim_tsm_rec_c6$lesiones_amplio, levels = c(FALSE, TRUE))))
)|>
    (\(df) {
  colnames(df) <- c("FALSE", "TRUE"); rownames(df)<-NULL; df
      })()

#:#:#:#:#:#:#:#:#:#:#:#:#:#:
#:#:#:#:#:#:#:
first_episode_tsm_1_sem_tsm_rec_c6<-
agregar_columnas_icd(first_episode_tsm_1_sem_tsm_c6)

prim_tsm_1_sem_clas_c6<-
rbind.data.frame(
  format_table_vec(table(factor(first_episode_tsm_1_sem_tsm_rec_c6$organic, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1_sem_tsm_rec_c6$substance, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1_sem_tsm_rec_c6$esquizofrenia, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1_sem_tsm_rec_c6$otros_psicoticos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1_sem_tsm_rec_c6$bipolares, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1_sem_tsm_rec_c6$depresivos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1_sem_tsm_rec_c6$ansiedad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1_sem_tsm_rec_c6$personalidad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1_sem_tsm_rec_c6$lesiones, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1_sem_tsm_rec_c6$lesiones_amplio, levels = c(FALSE, TRUE))))
)|>
    (\(df) {
  colnames(df) <- c("FALSE", "TRUE"); rownames(df)<-NULL; df
      })()

second_episode_tsm_1_sem_tsm_rec_c6<-
agregar_columnas_icd(second_episode_tsm_1_sem_tsm_c6)#second_episode_tsm_1_sem_tsm_c6

second_tsm_1_sem_clas_c6<-
rbind.data.frame(
  format_table_vec(table(factor(second_episode_tsm_1_sem_tsm_rec_c6$organic, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1_sem_tsm_rec_c6$substance, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1_sem_tsm_rec_c6$esquizofrenia, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1_sem_tsm_rec_c6$otros_psicoticos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1_sem_tsm_rec_c6$bipolares, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1_sem_tsm_rec_c6$depresivos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1_sem_tsm_rec_c6$ansiedad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1_sem_tsm_rec_c6$personalidad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1_sem_tsm_rec_c6$lesiones, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1_sem_tsm_rec_c6$lesiones_amplio, levels = c(FALSE, TRUE))))
)|>
    (\(df) {
  colnames(df) <- c("FALSE", "TRUE"); rownames(df)<-NULL; df
      })()
#:#:#:#:#:#:#:#:#:#:#:#:#:#:
#:#:#:#:#:#:#:

first_episode_com_rec_c6<-
agregar_columnas_icd(first_episode_com_c6)#first_episode_com_c6

prim_com_1_trim_clas_c6<-
rbind.data.frame(
  format_table_vec(table(factor(first_episode_com_rec_c6$organic, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_com_rec_c6$substance, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_com_rec_c6$esquizofrenia, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_com_rec_c6$otros_psicoticos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_com_rec_c6$bipolares, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_com_rec_c6$depresivos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_com_rec_c6$ansiedad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_com_rec_c6$personalidad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_com_rec_c6$lesiones, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_com_rec_c6$lesiones_amplio, levels = c(FALSE, TRUE))))
)|>
    (\(df) {
  colnames(df) <- c("FALSE", "TRUE"); rownames(df)<-NULL; df
      })()

second_episode_com_rec_c6<-
agregar_columnas_icd(second_episode_com_c6)#second_episode_com_c6

second_com_1_trim_clas_c6<-
rbind.data.frame(
  format_table_vec(table(factor(second_episode_com_rec_c6$organic, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_com_rec_c6$substance, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_com_rec_c6$esquizofrenia, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_com_rec_c6$otros_psicoticos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_com_rec_c6$bipolares, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_com_rec_c6$depresivos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_com_rec_c6$ansiedad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_com_rec_c6$personalidad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_com_rec_c6$lesiones, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_com_rec_c6$lesiones_amplio, levels = c(FALSE, TRUE))))
)|>
    (\(df) {
  colnames(df) <- c("FALSE", "TRUE"); rownames(df)<-NULL; df
      })()


#:#:#:#:#:#:#:#:#:#:#:#:#:#:
#:#:#:#:#:#:#:

first_episode_tus_rec_c6<-
agregar_columnas_icd(first_episode_tus_c6)#first_episode_com_c6

prim_trim_tus_clas_c6<-
rbind.data.frame(
  format_table_vec(table(factor(first_episode_tus_rec_c6$organic, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tus_rec_c6$substance, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tus_rec_c6$esquizofrenia, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tus_rec_c6$otros_psicoticos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tus_rec_c6$bipolares, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tus_rec_c6$depresivos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tus_rec_c6$ansiedad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tus_rec_c6$personalidad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tus_rec_c6$lesiones, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tus_rec_c6$lesiones_amplio, levels = c(FALSE, TRUE))))
)|>
    (\(df) {
  colnames(df) <- c("FALSE", "TRUE"); rownames(df)<-NULL; df
      })()

second_episode_tus_rec_c6<-
agregar_columnas_icd(second_episode_tus_c6)#second_episode_tus_c6

second_trim_tus_clas_c6<-
rbind.data.frame(
  format_table_vec(table(factor(second_episode_tus_rec_c6$organic, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tus_rec_c6$substance, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tus_rec_c6$esquizofrenia, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tus_rec_c6$otros_psicoticos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tus_rec_c6$bipolares, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tus_rec_c6$depresivos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tus_rec_c6$ansiedad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tus_rec_c6$personalidad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tus_rec_c6$lesiones, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tus_rec_c6$lesiones_amplio, levels = c(FALSE, TRUE))))
)|>
    (\(df) {
  colnames(df) <- c("FALSE", "TRUE"); rownames(df)<-NULL; df
      })()

#:#:#:#:#:#:#:#:#:#:#:#:#:#:
#:#:#:#:#:#:#:

first_episode_tsm_1yr_tsm_rec_c6<-
agregar_columnas_icd(first_episode_tsm_1yr_tsm_c6)

prim_trim_tsm_1yr_tsm_clas_c6<-
rbind.data.frame(
  format_table_vec(table(factor(first_episode_tsm_1yr_tsm_rec_c6$organic, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1yr_tsm_rec_c6$substance, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1yr_tsm_rec_c6$esquizofrenia, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1yr_tsm_rec_c6$otros_psicoticos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1yr_tsm_rec_c6$bipolares, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1yr_tsm_rec_c6$depresivos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1yr_tsm_rec_c6$ansiedad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1yr_tsm_rec_c6$personalidad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1yr_tsm_rec_c6$lesiones, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1yr_tsm_rec_c6$lesiones_amplio, levels = c(FALSE, TRUE))))
)|>
    (\(df) {
  colnames(df) <- c("FALSE", "TRUE"); rownames(df)<-NULL; df
      })()

second_episode_tsm_1yr_tsm_rec_c6<-
agregar_columnas_icd(second_episode_tsm_1yr_tsm_c6)

second_trim_tsm_1yr_tsm_clas_c6<-
rbind.data.frame(
  format_table_vec(table(factor(second_episode_tsm_1yr_tsm_rec_c6$organic, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1yr_tsm_rec_c6$substance, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1yr_tsm_rec_c6$esquizofrenia, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1yr_tsm_rec_c6$otros_psicoticos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1yr_tsm_rec_c6$bipolares, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1yr_tsm_rec_c6$depresivos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1yr_tsm_rec_c6$ansiedad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1yr_tsm_rec_c6$personalidad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1yr_tsm_rec_c6$lesiones, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1yr_tsm_rec_c6$lesiones_amplio, levels = c(FALSE, TRUE))))
)|>
    (\(df) {
  colnames(df) <- c("FALSE", "TRUE"); rownames(df)<-NULL; df
      })()


#:#:#:#:#:#:#:#:#:#:#:#:#:#:
#:#:#:#:#:#:#:
first_episode_tsm_1yr_otro_rec_c6<-
agregar_columnas_icd(first_episode_tsm_1yr_otro_c6)

prim_trim_tsm_1yr_other_clas_c6<-
rbind.data.frame(
  format_table_vec(table(factor(first_episode_tsm_1yr_otro_rec_c6$organic, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1yr_otro_rec_c6$substance, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1yr_otro_rec_c6$esquizofrenia, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1yr_otro_rec_c6$otros_psicoticos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1yr_otro_rec_c6$bipolares, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1yr_otro_rec_c6$depresivos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1yr_otro_rec_c6$ansiedad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1yr_otro_rec_c6$personalidad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1yr_otro_rec_c6$lesiones, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(first_episode_tsm_1yr_otro_rec_c6$lesiones_amplio, levels = c(FALSE, TRUE))))
)|>
    (\(df) {
  colnames(df) <- c("FALSE", "TRUE"); rownames(df)<-NULL; df
      })()

second_episode_tsm_1yr_otro_rec_c6<-
agregar_columnas_icd(second_episode_tsm_1yr_otro_c6)

second_trim_tsm_1yr_other_clas_c6<-
rbind.data.frame(
  format_table_vec(table(factor(second_episode_tsm_1yr_otro_rec_c6$organic, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1yr_otro_rec_c6$substance, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1yr_otro_rec_c6$esquizofrenia, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1yr_otro_rec_c6$otros_psicoticos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1yr_otro_rec_c6$bipolares, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1yr_otro_rec_c6$depresivos, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1yr_otro_rec_c6$ansiedad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1yr_otro_rec_c6$personalidad, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1yr_otro_rec_c6$lesiones, levels = c(FALSE, TRUE)))),
  format_table_vec(table(factor(second_episode_tsm_1yr_otro_rec_c6$lesiones_amplio, levels = c(FALSE, TRUE))))
)|>
    (\(df) {
  colnames(df) <- c("FALSE", "TRUE"); rownames(df)<-NULL; df
      })()

#::::::::##::::::::##::::::::##::::::::##::::::::##::::::::##::::::::#
#::::::::##::::::::##::::::::##::::::::##::::::::##::::::::##::::::::##::::::::#
#::::::::##::::::::##::::::::##::::::::##::::::::##::::::::##::::::::#
#
#
rownames_vec_c6 <- c(
  "Trastornos mentales orgánicos: F00.0-F09.9",
  "Trastornos por uso de sustancias: F10.0-F19.9",
  "Esquizofrenia: F20.0-F20.9",
  "Otros trastornos psicóticos no afectivos: F21.0-F29.9",
  "Trastornos bipolares: F30.0-F31.9",
  "Trastornos depresivos y otros del estado de ánimo: F32.0-F39.9",
  "Trastornos de ansiedad: F40.0-F49.9",
  "Trastornos de la personalidad: F60.0-F69.9",
  "Heridas autoinflingidas (info. intrahosp): X60-X84",
  "Intoxicación/efectos tóxicos de químicos y sustancias: T36-T65"
)

# prim_trim_tsm_clas_c6 second_trim_tsm_clas_c6 prim_tsm_1_sem_clas_c6 second_tsm_1_sem_clas_c6 prim_com_1_trim_clas_c6 second_com_1_trim_clas_c6 prim_trim_tus_clas_c6 second_trim_tus_clas_c6 prim_trim_tsm_1yr_tsm_clas_c6 second_trim_tsm_1yr_tsm_clas_c6 prim_trim_tsm_1yr_other_clas_c6 second_trim_tsm_1yr_other_clas_c6

cbind.data.frame(Total= tot_cie10_clas_c6[,2],
                 Total_2nd= tot_cie10_clas_2nd_c6[,2],
                 Prim_trim_tsm= prim_trim_tsm_clas_c6[,2],
                 Prim_trim_tsm_2nd= second_trim_tsm_clas_c6[,2],
                 Prim_trim_tus= prim_trim_tus_clas_c6[,2],
                 Prim_trim_tus_2nd= second_trim_tus_clas_c6[,2],
                 Prim_sem_tsm=  prim_tsm_1_sem_clas_c6[,2],
                 Prim_sem_tsm_2nd=  second_tsm_1_sem_clas_c6[,2],
                 Prim_trim_com= prim_com_1_trim_clas_c6[,2],
                 Prim_trim_com_2nd= second_com_1_trim_clas_c6[,2],
                 Prim_trim_tsm_1yr_tsm=  prim_trim_tsm_1yr_tsm_clas_c6[,2],
                 Prim_trim_tsm_1yr_tsm_2nd= second_trim_tsm_1yr_tsm_clas_c6[,2],
                 Prim_trim_tsm_1yr_otro= prim_trim_tsm_1yr_other_clas_c6[,2],
                 Prim_trim_tsm_1yr_otro_2nd= second_trim_tsm_1yr_other_clas_c6[,2]
           )|>
    (\(df) {
  rownames(df) <- rownames_vec_c6
  rio::export(df,"_output/diagnostic_classification_cie10_c6.xlsx")
  df
      })() |> 
  knitr::kable("markdown", caption= "Clasificación diagnóstica CIE-10")
Clasificación diagnóstica CIE-10
Total Total_2nd Prim_trim_tsm Prim_trim_tsm_2nd Prim_trim_tus Prim_trim_tus_2nd Prim_sem_tsm Prim_sem_tsm_2nd Prim_trim_com Prim_trim_com_2nd Prim_trim_tsm_1yr_tsm Prim_trim_tsm_1yr_tsm_2nd Prim_trim_tsm_1yr_otro Prim_trim_tsm_1yr_otro_2nd
Trastornos mentales orgánicos: F00.0-F09.9 100 (1.5) 19 (0.6) 83 (1.7) 13 (0.7) 0 (0) 2 (0.7) 4 (1.1) 2 (0.6) 5 (2.2) 1 (0.8) 2 (1.1) 1 (0.6) 6 (2.5) 0 (0)
Trastornos por uso de sustancias: F10.0-F19.9 1293 (19.5) 368 (11.8) 298 (6.1) 150 (7.7) 724 (97.1) 101 (34.9) 28 (7.8) 29 (8.7) 205 (91.5) 53 (41.4) 19 (10.9) 17 (9.9) 19 (7.9) 18 (7.5)
Esquizofrenia: F20.0-F20.9 441 (6.7) 216 (6.9) 342 (7.0) 122 (6.2) 0 (0) 3 (1.0) 40 (11.2) 36 (10.8) 20 (8.9) 16 (12.5) 34 (19.5) 36 (20.9) 5 (2.1) 3 (1.3)
Otros trastornos psicóticos no afectivos: F21.0-F29.9 423 (6.4) 115 (3.7) 331 (6.8) 70 (3.6) 0 (0) 6 (2.1) 28 (7.8) 17 (5.1) 38 (17.0) 11 (8.6) 16 (9.2) 11 (6.4) 10 (4.2) 0 (0)
Trastornos bipolares: F30.0-F31.9 411 (6.2) 199 (6.4) 350 (7.2) 140 (7.2) 0 (0) 2 (0.7) 24 (6.7) 29 (8.7) 16 (7.1) 15 (11.7) 10 (5.7) 11 (6.4) 11 (4.6) 2 (0.8)
Trastornos depresivos y otros del estado de ánimo: F32.0-F39.9 2009 (30.3) 470 (15.1) 1725 (35.3) 305 (15.6) 0 (0) 4 (1.4) 124 (34.6) 101 (30.3) 32 (14.3) 15 (11.7) 43 (24.7) 33 (19.2) 85 (35.6) 12 (5.0)
Trastornos de ansiedad: F40.0-F49.9 1082 (16.3) 182 (5.8) 941 (19.3) 108 (5.5) 0 (0) 8 (2.8) 52 (14.5) 38 (11.4) 18 (8.0) 3 (2.3) 21 (12.1) 18 (10.5) 50 (20.9) 7 (2.9)
Trastornos de la personalidad: F60.0-F69.9 1234 (18.6) 334 (10.7) 1010 (20.7) 192 (9.8) 0 (0) 11 (3.8) 62 (17.3) 74 (22.2) 71 (31.7) 15 (11.7) 33 (19.0) 35 (20.3) 58 (24.3) 7 (2.9)
Heridas autoinflingidas (info. intrahosp): X60-X84 237 (3.6) 237 (3.6) 198 (4.1) 115 (5.9) 17 (2.3) 4 (1.4) 3 (0.8) 13 (3.9) 11 (4.9) 4 (3.1) 3 (1.7) 4 (2.3) 5 (2.1) 12 (5.0)
Intoxicación/efectos tóxicos de químicos y sustancias: T36-T65 288 (4.3) 288 (4.3) 224 (4.6) 128 (6.5) 35 (4.7) 6 (2.1) 4 (1.1) 13 (3.9) 16 (7.1) 4 (3.1) 3 (1.7) 3 (1.7) 6 (2.5) 16 (6.7)
Código
# first_episode_1_trim_tsm_c6<-
#     df_filled2 |> 
#     dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6623", clus_pam_om6))$run) |> 
# first_episode_tsm_1_sem_tsm_c6<-
#     df_filled2 |> 
#     dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6522", clus_pam_om6))$run) |> 
# first_episode_com_c6<-
#     df_filled2 |> 
#     dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6574", clus_pam_om6))$run) |>
# first_episode_tus_c6<-
#     df_filled2 |> 
#     dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6612", clus_pam_om6))$run) |> 
# first_episode_tsm_1yr_tsm_c6<-
#     df_filled2 |> 
#     dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6268", clus_pam_om6))$run) |> 
# first_episode_tsm_1yr_otro_c6<-
#     df_filled2 |> 
#     dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6624", clus_pam_om6))$run) |> 

episodes_1_trim_tsm_c6<-
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6623", clus_pam_om6))$run) |> 
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::summarise(n= n())|>
    dplyr::ungroup()

episodes_1_trim_tus_c6<-
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6612", clus_pam_om6))$run) |> 
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::summarise(n= n())|>
    dplyr::ungroup()

episodes_1_sem_tsm_c6<-
df_filled2 |> 
    dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6522", clus_pam_om6))$run) |> 
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::summarise(n= n())|>
    dplyr::ungroup()

episodes_1_sem_com_c6<-
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6574", clus_pam_om6))$run) |>
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::summarise(n= n())|>
    dplyr::ungroup()

episodes_tsm_1yr_tsm_c6<-
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6268", clus_pam_om6))$run) |>
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::summarise(n= n())|>
    dplyr::ungroup()

episodes_tsm_1yr_otr_c6<-
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6624", clus_pam_om6))$run) |>
    dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo) |> 
    dplyr::group_by(run) |>
    dplyr::summarise(n= n())|>
    dplyr::ungroup()

#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:
#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:
rbind.data.frame(
df_filled2 |> 
  dplyr::filter(run %in% ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$run) |> 
  pull(days_elapsed) |> psych::describe(quant=c(.25,.75)),
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6623", clus_pam_om6))$run) |> 
  pull(days_elapsed) |> psych::describe(quant=c(.25,.75)),
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6612", clus_pam_om6))$run) |> 
  pull(days_elapsed) |> psych::describe(quant=c(.25,.75)),
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6522", clus_pam_om6))$run) |>
  pull(days_elapsed) |> psych::describe(quant=c(.25,.75)),
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6574", clus_pam_om6))$run) |>
  pull(days_elapsed) |> psych::describe(quant=c(.25,.75)),
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6268", clus_pam_om6))$run) |>
  pull(days_elapsed) |> psych::describe(quant=c(.25,.75)),
df_filled2 |> 
  dplyr::filter(run %in% subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6624", clus_pam_om6))$run) |>
  pull(days_elapsed) |> psych::describe(quant=c(.25,.75))
)|>
  (\(df) {
 rownames(df) <- c("Total", "Q1, TSM", "Q1, TUS", "1Sem, TSM", "Q1, comorb", "Q1 TSM, 1yr TSM", "Q1 TSM, 1yr Otro"); df
      })() |> 
  dplyr::select(-any_of(c("trimmed", "mad", "range", "skew", "kurtosis","se"))) |> 
      (\(df) {
  if (interactive()) {df|> rio::export("clipboard")}
  knitr::kable(df, "markdown", caption="Días de hospitalización por cluster", digits=2)
  })()
Días de hospitalización por cluster
vars n mean sd median min max Q0.25 Q0.75
Total 1 13230 13.41 30.29 6 0 1425 2 16
Q1, TSM 1 8167 11.33 16.07 5 0 475 2 15
Q1, TUS 1 1343 9.72 20.56 3 0 365 1 10
1Sem, TSM 1 1349 19.95 32.04 9 0 335 3 23
Q1, comorb 1 499 20.52 56.91 9 0 877 3 25
Q1 TSM, 1yr TSM 1 943 28.25 79.46 12 0 1425 4 28
Q1 TSM, 1yr Otro 1 929 8.66 13.00 4 0 136 2 9
Código
rbind.data.frame(
psych::describe(episodes_1_overall$n, quant=c(.25,.75)),
psych::describe(episodes_1_trim_tsm_c6$n, quant=c(.25,.75)),
psych::describe(episodes_1_trim_tus_c6$n, quant=c(.25,.75)),
psych::describe(episodes_1_sem_tsm_c6$n, quant=c(.25,.75)),
psych::describe(episodes_1_sem_com_c6$n, quant=c(.25,.75)),
psych::describe(episodes_tsm_1yr_tsm_c6$n, quant=c(.25,.75)),
psych::describe(episodes_tsm_1yr_otr_c6$n, quant=c(.25,.75))
) |> 
  (\(df) {
 rownames(df) <- c("Total", "Q1, TSM", "Q1, TUS", "1Sem, TSM", "Q1, comorb", "Q1 TSM, 1yr TSM", "Q1 TSM, 1yr Otro"); df
      })() |> 
  dplyr::select(-any_of(c("trimmed", "mad", "range", "skew", "kurtosis","se"))) |> 
    (\(df) {
  if (interactive()) {df|> rio::export("clipboard")}
  knitr::kable(df, "markdown", caption="Número de episodios por cluster", digits=2)
  })()
Número de episodios por cluster
vars n mean sd median min max Q0.25 Q0.75
Total 1 6626 2.00 1.75 1.0 1 36 1 2
Q1, TSM 1 4885 1.67 1.13 1.0 1 16 1 2
Q1, TUS 1 746 1.80 1.60 1.0 1 18 1 2
1Sem, TSM 1 358 3.77 2.85 3.0 1 36 2 5
Q1, comorb 1 224 2.23 1.74 2.0 1 14 1 3
Q1 TSM, 1yr TSM 1 174 5.42 4.00 4.5 1 31 3 6
Q1 TSM, 1yr Otro 1 239 3.89 2.35 3.0 2 19 2 4

Luego vemos la clasificación de PPOO por cluster

Código
janitor::chisq.test(df_filled2[,c("run","glosa_pueblo_originario")]|>
        dplyr::left_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run", "clus_pam_om6")], by="run", multiple="first")|>
        janitor::tabyl(glosa_pueblo_originario, clus_pam_om6))

    Pearson's Chi-squared test

data:  janitor::tabyl(dplyr::left_join(df_filled2[, c("run", "glosa_pueblo_originario")],     ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,         c("run", "clus_pam_om6")], by = "run", multiple = "first"),     glosa_pueblo_originario, clus_pam_om6)
X-squared = 175.35, df = 40, p-value < 2.2e-16
Código
# X-squared = 175.35, df = 40, p-value < 2.2e-16

Generamos un gráfico de PPOO por cada conglomerado.

Código
janitor::chisq.test(df_filled2[,c("run","glosa_pueblo_originario")] |> 
        dplyr::left_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run", "clus_pam_om6")], by="run", multiple="first") |> 
        janitor::tabyl(glosa_pueblo_originario, clus_pam_om6))
# X-squared = 175.35, df = 40, p-value < 2.2e-16
#
cat("Restringiendo el análisis a quienes reportan MINSAL Rapa Nui, Mapuche y Ninguno") 

df_filled2[, c("run", "glosa_pueblo_originario")]|>
  dplyr::left_join(
    ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[, c("run", "clus_pam_om6")],
    by = "run", multiple = "first"
  )|>
  dplyr::filter(glosa_pueblo_originario %in% c("RAPA NUI (PASCUENSE)", "MAPUCHE", "NINGUNO"))|>
  janitor::tabyl(glosa_pueblo_originario, clus_pam_om6)|>
  (\(df) {
    list(
      chisq = janitor::chisq.test(df),
      percentages = df|>
        janitor::adorn_percentages("col")|>
        dplyr::mutate(across(2:7, ~round(., 2)))
    )
  })()

ppoo_clus_pre_pam_om6_q<-
  df_filled2[,c("run","glosa_pueblo_originario")] |> 
  dplyr::left_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run", "clus_pam_om6","factor_inclusivo_real_hist_mas_autperc")], by="run", multiple="first") |> 
  dplyr::mutate(glosa_pueblo_originario_rec= dplyr::case_when(glosa_pueblo_originario=="NINGUNO" & factor_inclusivo_real_hist_mas_autperc!="00"~ "DESCONOCIDO", T~glosa_pueblo_originario)) |> 
  janitor::tabyl(glosa_pueblo_originario_rec, clus_pam_om6) |> 
  janitor::adorn_percentages("row")

reshape2::melt(ppoo_clus_pre_pam_om6_q, id.vars = "glosa_pueblo_originario_rec") |> 
  dplyr::mutate(glosa_pueblo_originario_rec= 
    dplyr::recode(glosa_pueblo_originario_rec, 
      "OTRO (ESPECIFICAR)"= "OTRO(n=86)", #"OTRO(n=77)", 
      "RAPA NUI (PASCUENSE)"= "RAPA NUI(n=37)", #"RAPA NUI(n=34)", 
      "YAGÁN (YÁMANA)"= "YAGÁN(n=2)",#"YAGÁN(n=2)",
      "AYMARA"= "AYMARA(n=15)",#"AYMARA(n=13)",
      "COLLA"= "COLLA(n=6)",#"COLLA(n=6)",
      "DIAGUITA"= "DIAGUITA(n=3)",#"DIAGUITA(n=3)",
      "KAWÉSQAR"= "KAWÉSQAR(n=4)",#"KAWÉSQAR(n=4)",
      "MAPUCHE"= "MAPUCHE(n=299)",#"MAPUCHE(n=255)",
      "DESCONOCIDO"= ".DESCONOCIDO(n=2.353)",#".DESCONOCIDO(n=1.985)",
      "NINGUNO"=".NINGUNO(n=10.425)"#".NINGUNO(n=9.156)"
      )) |> 
ggplot(aes(x = glosa_pueblo_originario_rec, y = value, fill = variable)) + 
  geom_bar(stat = "identity", position = "fill") + 
  scale_fill_manual(values =  c(
    "6623, Un trimestre, TSM(5)" = "#D2B48C",
    "6612, Un trimestre, TUS(4)" = "#E27A5B",
    "6522, Un semestre TSM(2)" = "#20B2AA",
    "6574, Comorbilidad un trimestre(3)" = "#6B8E23",
    "6268, TSM, 1 año después, TSM(1)" = "#2F4F4F",
    "6624, TSM, 1 año después, otras causas(6)" = "#708090"
  )) +
  labs(title = NULL,
       x = "Grupo Étnico",
       y = "Proporción de reportes",
       fill = "Grupos") +  # Cambia el título de la leyenda a "Grupos"
  theme_minimal() +
  theme(
    axis.text.y = element_text(size = 12),           # Tamaño de las etiquetas de los grupos étnicos
    axis.text.x = element_text(size = 12),           # Tamaño de las etiquetas del eje X
    axis.title.x = element_text(size = 14),          # Tamaño del título del eje X
    axis.title.y = element_text(size = 14),          # Tamaño del título del eje Y
    plot.title = NULL,  # Tamaño y estilo del título del gráfico
    legend.title = element_text(size = 14, margin = margin(b = -.1)),          # Tamaño del título de la leyenda
    legend.spacing.y = unit(1.5, "lines"),
    legend.box.spacing = unit(0.5, "lines"),      # Controla el espacio entre la leyenda y el gráfico
    legend.margin = margin(5, 5, 5, 5),  
    legend.key.height = unit(1, "cm"),  
    legend.text = element_text(size = 12)            # Tamaño del texto de la leyenda
    ) + 
  coord_flip()  # Hacer el gráfico horizontal
ggsave("_figs/grafico_ancho_achatado_pam_om6_q_25.png", width = 10, height = 5, dpi=1000)


ppoo_clus_pre_pam_om6_q_rapanui<-
  df_filled2[,c("run","glosa_pueblo_originario")] |> 
  dplyr::left_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run", "clus_pam_om6","factor_inclusivo_real_hist_mas_autperc")], by="run", multiple="first") |> 
  dplyr::mutate(glosa_pueblo_originario_rec= dplyr::case_when(glosa_pueblo_originario=="NINGUNO" & factor_inclusivo_real_hist_mas_autperc!="00"~ "DESCONOCIDO", glosa_pueblo_originario=="NINGUNO"~"NINGUNO", glosa_pueblo_originario=="RAPA NUI (PASCUENSE)"~"RAPA NUI", T~"RESTO")) |> 
  janitor::tabyl(glosa_pueblo_originario_rec, clus_pam_om6) |> 
  janitor::adorn_percentages("row")

ppoo_clus_pre_pam_om6_q_rapanui |> 
  knitr::kable("markdown", caption= "Clasificación PPOO vs. conglomerados")


cat("origen de Rapa Nui?")
df_filled2[,c("run","glosa_pueblo_originario")]|> 
    dplyr::left_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run", "clus_pam_om6","factor_inclusivo_real_hist_mas_autperc", "codigo_region_rec_base")], by="run", multiple="first")|> 
    dplyr::mutate(glosa_pueblo_originario_rec= dplyr::case_when(glosa_pueblo_originario=="NINGUNO" & factor_inclusivo_real_hist_mas_autperc!="00"~ "DESCONOCIDO", glosa_pueblo_originario=="NINGUNO"~"NINGUNO", glosa_pueblo_originario=="RAPA NUI (PASCUENSE)"~"RN", T~"RESTO"))|> 
    dplyr::filter(glosa_pueblo_originario_rec=="RN")|> janitor::tabyl(clus_pam_om6,codigo_region_rec_base)|>
  knitr::kable("markdown", caption= "Origen Establecimiento, PPOO Rapa Nui, según conglomerado")

    Pearson's Chi-squared test

data:  janitor::tabyl(dplyr::left_join(df_filled2[, c("run", "glosa_pueblo_originario")],     ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,         c("run", "clus_pam_om6")], by = "run", multiple = "first"),     glosa_pueblo_originario, clus_pam_om6)
X-squared = 175.35, df = 40, p-value < 2.2e-16

Restringiendo el análisis a quienes reportan MINSAL Rapa Nui, Mapuche y Ninguno$chisq

    Pearson's Chi-squared test

data:  df
X-squared = 116.54, df = 10, p-value < 2.2e-16


$percentages
 glosa_pueblo_originario 6623, Un trimestre, TSM(5) 6612, Un trimestre, TUS(4)
                 MAPUCHE                       0.02                       0.04
                 NINGUNO                       0.98                       0.96
    RAPA NUI (PASCUENSE)                       0.00                       0.00
 6522, Un semestre TSM(2) 6624, TSM, 1 año después, otras causas(6)
                     0.02                                      0.02
                     0.97                                      0.98
                     0.00                                      0.00
 6574, Comorbilidad un trimestre(3) 6268, TSM, 1 año después, TSM(1)
                               0.01                             0.02
                               0.98                             0.96
                               0.01                             0.02
Clasificación PPOO vs. conglomerados
glosa_pueblo_originario_rec 6623, Un trimestre, TSM(5) 6612, Un trimestre, TUS(4) 6522, Un semestre TSM(2) 6624, TSM, 1 año después, otras causas(6) 6574, Comorbilidad un trimestre(3) 6268, TSM, 1 año después, TSM(1)
DESCONOCIDO 0.6145346 0.1215470 0.0752231 0.0777731 0.0335742 0.0773481
NINGUNO 0.6186091 0.0960192 0.1081055 0.0693525 0.0391367 0.0687770
RAPA NUI 0.1621622 0.1351351 0.0810811 0.0270270 0.1351351 0.4594595
RESTO 0.6409639 0.1228916 0.1012048 0.0530120 0.0168675 0.0650602

Eventos hospitalarios y reportes de pertenencia a PPOO MINSAL, por conglomerados

origen de Rapa Nui?
Origen Establecimiento, PPOO Rapa Nui, según conglomerado
clus_pam_om6 noRM RM
6623, Un trimestre, TSM(5) 4 2
6612, Un trimestre, TUS(4) 4 1
6522, Un semestre TSM(2) 3 0
6624, TSM, 1 año después, otras causas(6) 0 1
6574, Comorbilidad un trimestre(3) 4 1
6268, TSM, 1 año después, TSM(1) 0 17

Eventos hospitalarios y reportes de pertenencia a PPOO MINSAL, por conglomerados

Eventos hospitalarios y reportes de pertenencia a PPOO MINSAL, por conglomerados

Eventos hospitalarios y reportes de pertenencia a PPOO MINSAL, por conglomerados

1.2.1. Trayectorias

Vemos los gráficos de las trayectorias

Código
categories_pam_om6_q<-attr(States_Wide.seq_quarter_t_prim_adm_cens, "labels")
new_labels <- categories_pam_om6_q
new_labels[which(categories_pam_om6_q == "Otras causas")] <- "Otras\ncausas"
#new_labels[which(categories == "Consumo\nde sustancias")] <- "Consumo de\nsustancias"

# Creamos un vector con las columnas llenando con NA si faltan valores
sil_pam_om_clus6_q <- wcSilhouetteObs(as.dist(dist_quarter_om), 
        pamRange_quarter_om$clustering$cluster6, measure="ASW")


seq_plot_pam_om6_q <- ggseqiplot(States_Wide.seq_quarter_t_prim_adm_cens, 
                                 group= ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6,
                                 facet_ncol=2, facet_nrow=4, sortv=sil_pam_om_clus6_q) +
  theme(legend.position = "none")+
  labs(x="Trimestres", y="# IDs de usuarios")+
  #guides(fill = guide_legend(nrow = 1))+
  theme(
    panel.spacing = unit(0.1, "lines"),  # Reduce el espaciado entre los paneles
    axis.text.y = element_text(size = 15),           # Tamaño de las etiquetas de los grupos étnicos
    axis.text.x = element_text(size = 15),           # Tamaño de las etiquetas del eje X
    axis.title.x = element_text(size = 15),          # Tamaño del título del eje X
    axis.title.y = element_text(size = 15, margin = margin(r = -10)),#,margin = margin(l = -10)),
    strip.text = element_text(size = 15, margin = margin(b =-15, t=10)),
    legend.text = element_text(size = 15),
    legend.spacing.x = unit(0.1, 'cm'),  # Alinea el título de la leyenda hacia la izquierda
    legend.box.margin = margin(t = 0, r = 0, b = 0, l = -50),
    legend.position = "bottom", 
    legend.justification = "left",
    panel.spacing.y = unit(0.2, "lines"),
    plot.margin = margin(10, 10, 10, 10), # Ajusta márgenes globales
    strip.placement = "outside",   # Para colocar las tiras fuera de los ejes
    strip.background = element_blank() # Elimina el fondo para que parezca más espacioso
    #legend.key.size = unit(1.5, "lines"),        # Aumenta el tamaño de los símbolos en la leyenda
  )+
  guides(fill = guide_legend(nrow = 1)) +
  scale_fill_manual(labels = new_labels, values=c("#E2725B", "#556B2F", "#D2B48C",#"#8B4513",
                                                  "#FFFFFF","#808080","#000000"))+
  scale_color_manual(labels = new_labels, values=c("#E2725B", "#556B2F", "#D2B48C",#"#8B4513",
                                                   "#FFFFFF","#808080","#000000"))
seq_plot_pam_om6_q 

ggsave(filename="_figs/clusters_pam_om6_q_mod_25.png", seq_plot_pam_om6_q,  width = 12*.95, height = 8*.95, dpi=1000)
Trayectorias de hospitalización, orden de sujetos según el primer estado observado y su duración, representando a cada individuo como una línea en el gráfico (observaciones ordenadas de acuerdo a ASW)

Trayectorias de hospitalización, orden de sujetos según el primer estado observado y su duración, representando a cada individuo como una línea en el gráfico (observaciones ordenadas de acuerdo a ASW)

Código
seq_plot2_pam_om6_q <- ggseqdplot(States_Wide.seq_quarter_t_prim_adm_cens, 
                                 group= ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6,
                                 facet_ncol=2, facet_nrow=4) +
  theme(legend.position = "none")+  # Colocar la leyenda abajo
  labs(x="Trimestres", y="Frecuencia relativa de estados")+
  theme(
    panel.spacing = unit(0.1, "lines"),
    axis.text.y = element_text(size = 15),           # Tamaño de las etiquetas de los grupos étnicos
    axis.text.x = element_text(size = 15),           # Tamaño de las etiquetas del eje X
    axis.title.x = element_text(size = 15),          # Tamaño del título del eje X
    axis.title.y = element_text(size = 15, margin = margin(r = -5)),
    strip.text = element_text(size = 15),
    panel.spacing.y = unit(0.5, "lines"),
    strip.placement = "outside",   # Para colocar las tiras fuera de los ejes
    strip.background = element_blank() # Elimina el fondo para que parezca más espacioso
    #legend.key.size = unit(1.5, "lines"),        # Aumenta el tamaño de los símbolos en la leyenda    
  )  # Colocar la leyenda abajo
seq_plot2_pam_om6_q
ggsave("_figs/clusterspam_om62_q_mod_25.png",seq_plot2_pam_om6_q, width = 12, height = 8, dpi=1000)


seq_plot2_pam_om6_q <- sprintf("%1.2f",pamRange_quarter_om$stats[5,])
seq_plot2_pam_om6_q <-as.data.frame(t(seq_plot2_pam_om6_q))
colnames(seq_plot2_pam_om6_q)<-attr(pamRange_quarter_om$stats, "name")

seq_plot2_pam_om6_q|>knitr::kable()
PBC HG HGSD ASW ASWw CH R2 CHsq R2sq HC
0.59 0.77 0.76 0.59 0.59 804.54 0.38 1249.75 0.49 0.10

Trayectorias de hospitalización, frecuencia relativa de estados en un gráfico de barras apiladas por trimestre.

Trayectorias de hospitalización, frecuencia relativa de estados en un gráfico de barras apiladas por trimestre.

Trayectorias de hospitalización, frecuencia relativa de estados en un gráfico de barras apiladas por trimestre.

De este modo, presenta el cambio agregado en la distribución de estados a lo largo del tiempo, sin considerar las secuencias individuales.

Código
invisible("Definimos las observaciones que tienen siluetas negativas")
sil_neg_pam_om_clus6_q <- which(sil_pam_om_clus6_q<0)

invisible("A qué conglomerados pertenecen?")
table(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[sil_neg_pam_om_clus6_q, "clus_pam_om6"])

ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$rn<- 1:nrow(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens)
clus_pam_om6
               6623, Un trimestre, TSM(5) 
                                        0 
               6612, Un trimestre, TUS(4) 
                                        0 
                 6522, Un semestre TSM(2) 
                                        3 
6624, TSM, 1 año después, otras causas(6) 
                                      132 
       6574, Comorbilidad un trimestre(3) 
                                        0 
         6268, TSM, 1 año después, TSM(1) 
                                      101 

1.2.2.Exploración transiciones

1.2.2.a Transiciones- RM y no RM

Tasas de transición no RM a RM y viceversa

Código
invisible("Tasas de transición no RM a RM y viceversa")

trim_tasa_pam_om6_q_cens_cnt<-  
  seqcount_t(States_Wide.seq_quarter_t_prim_adm_RM_cens, 
             group=ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6)|>
  dplyr::filter(count>0)|>
  dplyr::mutate(trans = paste0(from,"_", to))|>
  dplyr::mutate(across(c("from","to"),~  gsub("\\[->\\s*|\\s*->\\s*\\]|\\[|\\]", "", .))) 
trim_tasa_pam_om6_q_cens_rate<-  
  seqtrate_t(States_Wide.seq_quarter_t_prim_adm_RM_cens, 
             group=ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6)|>
  dplyr::filter(rate>0)|>
  dplyr::mutate(trans = paste0(from,"_", to))|>
  dplyr::mutate(across(c("from","to"),~  gsub("\\[->\\s*|\\s*->\\s*\\]|\\[|\\]", "", .)))
Código
trim_tasa_pam_om6_q_cens_rate|>  
  dplyr::left_join(trim_tasa_pam_om6_q_cens_cnt, by=c("from"="from", "glosa_sexo"="glosa_sexo","to"="to"))|>
  dplyr::rename("recuento"="count")|>
  dplyr::filter(from %in% c("RM", "noRM"))|> 
  ggplot(aes(x = from, y = to, fill = rate, size=log(recuento+1))) +
  geom_tile() +
  coord_flip()+
  scale_fill_gradient(low = "white", high = "blue") + # Ajusta la escala de colores según tus preferencias
  labs(title = "Tasas de transición, Trimestre (s/censura)",
       x = "Desde",
       y = "Hacia",
       fill = "Rate") +
  theme_minimal() +
  facet_wrap(~glosa_sexo)+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))+
  geom_text(aes(label = sprintf("%1.2f", rate), size =log(recuento+1)*.5), color = "black")

invisible("Hay muy pocos casos que se entrecruzan entre noRM y RM (fuera de la diagnonal)")
Porcentajes de transición no-RM y RM por cada cluster

Porcentajes de transición no-RM y RM por cada cluster

1.2.2.b Transiciones
Código
trim_tasa2_pam_om6_q_cens_cnt<-  
   seqcount_t(States_Wide.seq_quarter_t_prim_adm_cens, 
             group=ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6)|>
  dplyr::filter(count>0)|>
  dplyr::mutate(trans = paste0(from,"_", to))|>
  dplyr::mutate(across(c("from","to"),~  gsub("\\[->\\s*|\\s*->\\s*\\]|\\[|\\]", "", .))) 
trim_tasa2_pam_om6_q_cens_rate<-  
  seqtrate_t(States_Wide.seq_quarter_t_prim_adm_cens, 
             group=ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6)|>
  dplyr::filter(rate>0)|>
  dplyr::mutate(trans = paste0(from,"_", to))|>
  dplyr::mutate(across(c("from","to"),~  gsub("\\[->\\s*|\\s*->\\s*\\]|\\[|\\]", "", .)))
Código
trim_tasa2_pam_om6_q_cens_rate|>  
  dplyr::left_join(trim_tasa2_pam_om6_q_cens_cnt, by=c("from"="from", "glosa_sexo"="glosa_sexo","to"="to"))|>
  dplyr::rename("recuento"="count")|>
  #dplyr::filter(from %in% c("RM", "noRM"))|> 
  ggplot(aes(x = from, y = to, fill = rate, size=log(recuento+1))) +
  geom_tile() +
  coord_flip()+
  scale_fill_gradient(low = "white", high = "blue") + # Ajusta la escala de colores según tus preferencias
  labs(title = "Tasas de transición, Trimestre (s/censura)",
       x = "Desde",
       y = "Hacia",
       fill = "Rate") +
  theme_minimal() +
  facet_wrap(~glosa_sexo)+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))+
  geom_text(aes(label = sprintf("%1.2f", rate), size =log(recuento+1)*.5), color = "black")
Porcentajes de transición, transiciones posteriores, por cada cluster

Porcentajes de transición, transiciones posteriores, por cada cluster

1.2.2.c Tiempo promedio por cluster
Código
seq_mean_t(States_Wide.seq_quarter_t_prim_adm_cens, 
             group=ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6)|>
  data.table::as.data.table(keep.rowname=T)|> 
  dplyr::mutate(rn= gsub("\\d", "", rn))|> 
  ggplot(aes(x=rn, fill= factor_inclusivo, y=Mean))+
  geom_bar(width = 1, stat = "identity") +
  theme_minimal() +
  facet_wrap(~factor_inclusivo)+
  labs(title = NULL,
       x = NULL,
       y = NULL) +
    scale_fill_manual(values =  c(
    "6623, Un trimestre, TSM(5)" = "#D2B48C",
    "6612, Un trimestre, TUS(4)" = "#E27A5B",
    "6522, Un semestre TSM(2)" = "#20B2AA",
    "6574, Comorbilidad un trimestre(3)" = "#6B8E23",
    "6268, TSM, 1 año después, TSM(1)" = "#2F4F4F",
    "6624, TSM, 1 año después, otras causas(6)" = "#708090"
  )) +
  coord_flip()+
  theme(#axis.text.x = element_blank(),
    #axis.text.y = element_blank(),
    panel.grid = element_blank()) +
#  scale_fill_brewer(palette = "Pastel1", labels=c("Sin\nautoidentificación\nni reconocimiento", "Autoidentificación\nsin reconocimiento", "Ambas")) +
  geom_text(aes(label = round(Mean,1)), 
            position = position_stack(vjust = 0.5), 
            size = 3.5, # Ajusta el tamaño de la fuente aquí
            color = "black", # Color del texto
            family = "sans", # Puedes cambiar la fuente si lo deseas
            background = element_rect(fill = "white", color = NA)) + # Fondo blanco
  theme(legend.title = element_blank())
        #, legend.position=c(.8,.15))

invisible("No me aporta mucho")
Tiempo promedio en cada estado por estatus PPOO (Trimestral c/censura)

Tiempo promedio en cada estado por estatus PPOO (Trimestral c/censura)

1.2.3. Comparación variables

1.2.3.a. Comparación covariables- PPOO
Código
ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens|>
  dplyr::count(clus_pam_om6, factor_inclusivo_real_hist_mas_autperc)|>
  dplyr::group_by(clus_pam_om6)|>
  dplyr::mutate(n_prop = paste0(n, " (",scales::percent(n / sum(n), accuracy=.1),")"))|>
  dplyr::select(-n)|>
  tidyr::pivot_wider(names_from = clus_pam_om6, values_from = n_prop, values_fill = "0")|>
  dplyr::mutate(factor_inclusivo_real_hist_mas_autperc = factor(factor_inclusivo_real_hist_mas_autperc, levels = c("11", "10", "00"), labels= c("Se identifica/hay reconocimeinto", "No se identifica/hay reconocimiento", "No se identifica/no pertenece")))|> 
  dplyr::arrange(factor_inclusivo_real_hist_mas_autperc)|>
  (\(df) {
  if (interactive()) {mutate(df, across(-factor_inclusivo_real_hist_mas_autperc, ~ gsub("%", "", gsub("\\.", ",", .))))|> rio::export("clipboard")}
  knitr::kable(df, caption="Porcentajes por fila, conglomerado vs. Pertenencia/identificación + Reconocimento CONADI PPOO")
  })()
Porcentajes por fila, conglomerado vs. Pertenencia/identificación + Reconocimento CONADI PPOO
factor_inclusivo_real_hist_mas_autperc 6623, Un trimestre, TSM(5) 6612, Un trimestre, TUS(4) 6522, Un semestre TSM(2) 6624, TSM, 1 año después, otras causas(6) 6574, Comorbilidad un trimestre(3) 6268, TSM, 1 año después, TSM(1)
Se identifica/hay reconocimeinto 409 (8.4%) 74 (9.9%) 23 (6.4%) 23 (9.6%) 17 (7.6%) 16 (9.2%)
No se identifica/hay reconocimiento 551 (11.3%) 92 (12.3%) 39 (10.9%) 26 (10.9%) 21 (9.4%) 25 (14.4%)
No se identifica/no pertenece 3925 (80.3%) 580 (77.7%) 296 (82.7%) 190 (79.5%) 186 (83.0%) 133 (76.4%)

Vemos las categorías de clasificación de PPOO según autopercepción (en MINSAL y en RSH) y reconocimiento CONADI.

Código
chisq.test(table(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$factor_inclusivo_real_hist_mas_autperc,ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6))
#X-squared = 8.6689, df = 10, p-value = 0.5638

chisq_cramerv(
with(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, table(factor_inclusivo_real_hist_mas_autperc , clus_pam_om6))
)
# $chisq_statistic
# [1] "8.67"
# 
# $chisq_df
# df 
# 10 
# 
# $chisq_p_value
# [1] "0.5638"
# 
# $cramers_v
# [1] "0.03"
message("Descartando valores negativos en sil width")
chisq.test(
with(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus4_q), table(factor_inclusivo_real_hist_mas_autperc, clus_pam_om6))
)
# X-squared = 12.066, df = 10, p-value = 0.2807

chisq_cramerv(
with(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus4_q), table(factor_inclusivo_real_hist_mas_autperc, clus_pam_om6))
)
# $chisq_statistic
# [1] "12.07"
# 
# $chisq_df
# df 
# 10 
# 
# $chisq_p_value
# [1] "0.2807"
# 
# $cramers_v
# [1] "0.03"

    Pearson's Chi-squared test

data:  table(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$factor_inclusivo_real_hist_mas_autperc,     ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6)
X-squared = 8.6689, df = 10, p-value = 0.5638

$chisq_statistic
[1] "8.67"

$chisq_df
df 
10 

$chisq_p_value
[1] "0.5638"

$cramers_v
[1] "0.03"


    Pearson's Chi-squared test

data:  with(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens,     !rn %in% sil_neg_pam_om_clus4_q), table(factor_inclusivo_real_hist_mas_autperc,     clus_pam_om6))
X-squared = 12.066, df = 10, p-value = 0.2807

$chisq_statistic
[1] "12.07"

$chisq_df
df 
10 

$chisq_p_value
[1] "0.2807"

$cramers_v
[1] "0.03"

Ahora lo hacemos con la versión binarizada

Código
ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens |> 
    dplyr::mutate(death_time_rec=ifelse(death_time==20,0,1)) |> 
    janitor::tabyl(factor_inclusivo_real_hist_mas_autperc_bin,clus_pam_om6) |>
    janitor::chisq.test()
#X-squared = 7.0086, df = 5, p-value = 0.22


chisq_cramerv(
with(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, table(factor_inclusivo_real_hist_mas_autperc_bin, clus_pam_om6))
)
# $chisq_statistic
# [1] "7.01"
# 
# $chisq_df
# df 
#  5 
# 
# $chisq_p_value
# [1] "0.2200"
# 
# $cramers_v
# [1] "0.03"

message("Descartando valores negativos en sil width")
chisq.test(
with(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus4_q), table(factor_inclusivo_real_hist_mas_autperc_bin , clus_pam_om6))
)
#X-squared = 9.6531, df = 5, p-value = 0.08568

chisq_cramerv(
with(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus4_q), table(factor_inclusivo_real_hist_mas_autperc_bin, clus_pam_om6))
)
# $chisq_statistic
# [1] "9.65"
# 
# $chisq_df
# df 
#  5 
# 
# $chisq_p_value
# [1] "0.0857"
# 
# $cramers_v
# [1] "0.04"

    Pearson's Chi-squared test

data:  janitor::tabyl(dplyr::mutate(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens,     death_time_rec = ifelse(death_time == 20, 0, 1)), factor_inclusivo_real_hist_mas_autperc_bin,     clus_pam_om6)
X-squared = 7.0086, df = 5, p-value = 0.22

$chisq_statistic
[1] "7.01"

$chisq_df
df 
 5 

$chisq_p_value
[1] "0.2200"

$cramers_v
[1] "0.03"


    Pearson's Chi-squared test

data:  with(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens,     !rn %in% sil_neg_pam_om_clus4_q), table(factor_inclusivo_real_hist_mas_autperc_bin,     clus_pam_om6))
X-squared = 9.6531, df = 5, p-value = 0.08568

$chisq_statistic
[1] "9.65"

$chisq_df
df 
 5 

$chisq_p_value
[1] "0.0857"

$cramers_v
[1] "0.04"
Código
ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens|>
  dplyr::count(clus_pam_om6, factor_inclusivo_real_hist_mas_autperc_bin)|>
  dplyr::group_by(clus_pam_om6) |>
  dplyr::mutate(n_prop = paste0(n, " (",scales::percent(n / sum(n), accuracy=.1),")")) |>
  dplyr::select(-n) |>
  tidyr::pivot_wider(names_from = factor_inclusivo_real_hist_mas_autperc_bin, values_from = n_prop, values_fill = "0")|> 
  (\(df) {
        if (interactive()) {mutate(df, across(-1, ~ gsub("%", "", gsub("\\.", ",", .))))|> dplyr::select(3)|>t()|>  rio::export("clipboard")}
        knitr::kable(df, "markdown", col.names=c("Conglomerados","No se identifica/no pertenece", "Hay reconocimeinto"), caption="Porcentajes por fila, conglomerado vs. Pertenencia/identificación + Reconocimento CONADI PPOO")
      })()
Porcentajes por fila, conglomerado vs. Pertenencia/identificación + Reconocimento CONADI PPOO
Conglomerados No se identifica/no pertenece Hay reconocimeinto
6623, Un trimestre, TSM(5) 3925 (80.3%) 960 (19.7%)
6612, Un trimestre, TUS(4) 580 (77.7%) 166 (22.3%)
6522, Un semestre TSM(2) 296 (82.7%) 62 (17.3%)
6624, TSM, 1 año después, otras causas(6) 190 (79.5%) 49 (20.5%)
6574, Comorbilidad un trimestre(3) 186 (83.0%) 38 (17.0%)
6268, TSM, 1 año después, TSM(1) 133 (76.4%) 41 (23.6%)

Tampoco se observa asociación alguna. Hicimos una prueba post-hoc usando Bonferroni

1.2.3.b. Comparación covariables- Mortalidad
Código
# 
ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens |> 
  dplyr::mutate(death_time_rec=ifelse(death_time==20,0,1)) |> 
  janitor::tabyl(clus_pam_om6,death_time_rec) |> 
  dplyr::mutate(`1`= paste0(`1`," (", scales::percent(`1`/(`0`+`1`), accuracy=.1),")")) |> 
  dplyr::left_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens |> 
  dplyr::group_by(clus_pam_om6) |> 
  dplyr::summarise(mean=sprintf("%1.1f",mean(cens_time))), by="clus_pam_om6") |> 
  dplyr::select(-`0`)|> 
  (\(df) {
        if (interactive()) {mutate(df, across(-1, ~ gsub("%", "", gsub("\\.", ",", .))))|> dplyr::select(2)|> t()|>  rio::export("clipboard")}
        knitr::kable(df, "markdown", col.names=c("Conglomerado","Mortalidad observada", "Promedio"), caption="Post-hoc, conglomerado vs. Mortalidad y tiempo a censura")
      })()
Post-hoc, conglomerado vs. Mortalidad y tiempo a censura
Conglomerado Mortalidad observada Promedio
6623, Un trimestre, TSM(5) 58 (1.2%) 17.9
6612, Un trimestre, TUS(4) 19 (2.5%) 18.2
6522, Un semestre TSM(2) 8 (2.2%) 17.9
6624, TSM, 1 año después, otras causas(6) 5 (2.1%) 17.8
6574, Comorbilidad un trimestre(3) 6 (2.7%) 18.1
6268, TSM, 1 año después, TSM(1) 3 (1.7%) 18.1
Código
ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens|>
             dplyr::mutate(death_time_rec=ifelse(death_time==20,0,1))|>
             janitor::tabyl(death_time_rec,clus_pam_om6)|>
              janitor::chisq.test(correct=T)
#X-squared = 12.855, df = 5, p-value = 0.02478

ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens|>
             dplyr::mutate(death_time_rec=ifelse(death_time==20,0,1))|>
             janitor::tabyl(death_time_rec,clus_pam_om6)|>
              janitor::fisher.test(simulate.p.value=T, B=1e5)
#p-value = 0.0143

chisq_cramerv(
with(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens|>
             dplyr::mutate(death_time_rec=ifelse(death_time==20,0,1)), table(death_time_rec , clus_pam_om6))
)
# $chisq_statistic
# [1] "12.85"
# 
# $chisq_df
# df 
#  5 
# 
# $chisq_p_value
# [1] "0.0248"
# 
# $cramers_v
# [1] "0.04"
cat("Descartando valores negativos en sil width")
chisq_cramerv(
with(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q)|>
             dplyr::mutate(death_time_rec=ifelse(death_time==20,0,1)), table(death_time_rec , clus_pam_om6))
)
# $chisq_statistic
# [1] "12.85"
# 
# $chisq_df
# df 
#  5 
# 
# $chisq_p_value
# [1] "0.0248"
# 
# $cramers_v
# [1] "0.04"
subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q)|>
             dplyr::mutate(death_time_rec=ifelse(death_time==20,0,1))|>
             janitor::tabyl(death_time_rec,clus_pam_om6)|>
              janitor::fisher.test(simulate.p.value=T, B=1e5)
#p-value = 0.00155

#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
##_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_

tab_cl_mortalidad_pam_om6_q<- 
  ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens|>
  dplyr::mutate(death_time_rec=ifelse(death_time==20,0,1))|> 
  janitor::tabyl(death_time_rec,clus_pam_om6)|> 
  as.matrix(ncol=2)

#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
##_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_

chisq.posthoc.test(with(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens|> 
             dplyr::mutate(death_time_rec=ifelse(death_time==20,0,1)), table(death_time_rec , clus_pam_om6), simulate.p.value=T, B=1e5))|> 
  mutate(across(3: dplyr::last_col(),~sprintf("%1.3f",as.numeric(.))))|> 
  t() |> 
  knitr::kable("markdown", digits=3)

    Pearson's Chi-squared test

data:  janitor::tabyl(dplyr::mutate(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens,     death_time_rec = ifelse(death_time == 20, 0, 1)), death_time_rec,     clus_pam_om6)
X-squared = 12.855, df = 5, p-value = 0.02478


    Fisher's Exact Test for Count Data with simulated p-value (based on
    1e+05 replicates)

data:  janitor::tabyl(dplyr::mutate(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens,     death_time_rec = ifelse(death_time == 20, 0, 1)), death_time_rec,     clus_pam_om6)
p-value = 0.01452
alternative hypothesis: two.sided

$chisq_statistic
[1] "12.85"

$chisq_df
df 
 5 

$chisq_p_value
[1] "0.0248"

$cramers_v
[1] "0.04"

Descartando valores negativos en sil width$chisq_statistic
[1] "19.29"

$chisq_df
df 
 5 

$chisq_p_value
[1] "0.0017"

$cramers_v
[1] "0.05"


    Fisher's Exact Test for Count Data with simulated p-value (based on
    1e+05 replicates)

data:  janitor::tabyl(dplyr::mutate(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens,     !rn %in% sil_neg_pam_om_clus6_q), death_time_rec = ifelse(death_time ==     20, 0, 1)), death_time_rec, clus_pam_om6)
p-value = 0.00164
alternative hypothesis: two.sided
Dimension 0 0 1 1
Value Residuals p values Residuals p values
6623, Un trimestre, TSM(5) 3.448 NA -3.448 NA
6612, Un trimestre, TUS(4) -2.516 0.142 2.516 0.142
6522, Un semestre TSM(2) -1.187 1.000 1.187 1.000
6624, TSM, 1 año después, otras causas(6) -0.776 1.000 0.776 1.000
6574, Comorbilidad un trimestre(3) -1.487 1.000 1.487 1.000
6268, TSM, 1 año después, TSM(1) -0.253 1.000 0.253 1.000
Código
# Realizar el análisis y crear la tabla directamente
pairwise.prop.test(t(tab_cl_mortalidad_pam_om6_q[,2:ncol(tab_cl_mortalidad_pam_om6_q)]), p.adjust.method = "holm")$p.value |>
  as.table() |>
  as.data.frame() |>
  rename(Grupo_1 = Var1, Grupo_2 = Var2, p_value = Freq) |>
  filter(!is.na(p_value)) |>
  mutate(p_value = ifelse(p_value <.001, "<.001", sprintf("%1.3f",p_value)) 
  ) |>
  knitr::kable(
    col.names = c("Grupo 1", "Grupo 2", "Valor p ajustado"),
    align = "l",
    caption= "Corrección parcial por comparaciones múltiples (Holm–Bonferroni)"
  )
Warning in prop.test(x[c(i, j)], n[c(i, j)], ...): Chi-squared approximation
may be incorrect
Warning in prop.test(x[c(i, j)], n[c(i, j)], ...): Chi-squared approximation
may be incorrect
Warning in prop.test(x[c(i, j)], n[c(i, j)], ...): Chi-squared approximation
may be incorrect
Warning in prop.test(x[c(i, j)], n[c(i, j)], ...): Chi-squared approximation
may be incorrect
Warning in prop.test(x[c(i, j)], n[c(i, j)], ...): Chi-squared approximation
may be incorrect
Warning in prop.test(x[c(i, j)], n[c(i, j)], ...): Chi-squared approximation
may be incorrect
Warning in prop.test(x[c(i, j)], n[c(i, j)], ...): Chi-squared approximation
may be incorrect
Warning in prop.test(x[c(i, j)], n[c(i, j)], ...): Chi-squared approximation
may be incorrect
Corrección parcial por comparaciones múltiples (Holm–Bonferroni)
Grupo 1 Grupo 2 Valor p ajustado
6612, Un trimestre, TUS(4) 6623, Un trimestre, TSM(5) 0.075
6522, Un semestre TSM(2) 6623, Un trimestre, TSM(5) 1.000
6624, TSM, 1 año después, otras causas(6) 6623, Un trimestre, TSM(5) 1.000
6574, Comorbilidad un trimestre(3) 6623, Un trimestre, TSM(5) 1.000
6268, TSM, 1 año después, TSM(1) 6623, Un trimestre, TSM(5) 1.000
6522, Un semestre TSM(2) 6612, Un trimestre, TUS(4) 1.000
6624, TSM, 1 año después, otras causas(6) 6612, Un trimestre, TUS(4) 1.000
6574, Comorbilidad un trimestre(3) 6612, Un trimestre, TUS(4) 1.000
6268, TSM, 1 año después, TSM(1) 6612, Un trimestre, TUS(4) 1.000
6624, TSM, 1 año después, otras causas(6) 6522, Un semestre TSM(2) 1.000
6574, Comorbilidad un trimestre(3) 6522, Un semestre TSM(2) 1.000
6268, TSM, 1 año después, TSM(1) 6522, Un semestre TSM(2) 1.000
6574, Comorbilidad un trimestre(3) 6624, TSM, 1 año después, otras causas(6) 1.000
6268, TSM, 1 año después, TSM(1) 6624, TSM, 1 año después, otras causas(6) 1.000
6268, TSM, 1 año después, TSM(1) 6574, Comorbilidad un trimestre(3) 1.000
Código
# Cargar las librerías necesarias
library(survival)
library(ggplot2)

# Crear la variable de supervivencia
surv_obj_6c <- Surv(time = ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$death_time,
                 event = ifelse(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$death_time==20,0,1))

# Realizar el análisis de Log-Rank (survdiff)
surv_diff_6c <- survdiff(surv_obj_6c ~ clus_pam_om6,
                      data = ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens)

# Mostrar los resultados del test
print(surv_diff_6c)

#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
##_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_

pairwise_survdiff(
        formula = Surv(time = death_time,
                 event = ifelse(death_time==20,0,1)) ~ clus_pam_om6,
    data = ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens,
    p.adjust.method = "holm"
)

#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
##_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_

cat("Sin siluetas negativas")
surv_diff_6c_neg_sil <- survdiff(Surv(time = death_time,
                 event = ifelse(death_time==20,0,1)) ~ clus_pam_om6,
                      data = subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q))

# Mostrar los resultados del test
print(surv_diff_6c_neg_sil)

pairwise_survdiff(
    formula = Surv(time = death_time,
                 event = ifelse(death_time==20,0,1)) ~ clus_pam_om6,
    data = subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q), rho=0,
    p.adjust.method = "holm"
)
#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
##_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_

# Ajustar el modelo de Kaplan-Meier
km_fit_6c <- survfit(surv_obj_6c ~ clus_pam_om6,
                  data = ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens)

# Extraer los datos del modelo Kaplan-Meier para usar con ggplot
km_data_6c <- data.frame(
  time = km_fit_6c$time,
  surv = km_fit_6c$surv,
  upper = km_fit_6c$upper,
  lower = km_fit_6c$lower,
  strata = rep(c("6623, Un trimestre, TSM(5)", "6612, Un trimestre, TUS(4)", "6522, Un semestre TSM(2)", "6624, TSM, 1 año después, otras causas(6)", "6574, Comorbilidad un trimestre(3)", "6268, TSM, 1 año después, TSM(1)"), km_fit_6c$strata)
)

biostat3::survRate(Surv(time = death_time,
  event = ifelse(death_time==20,0,1)) ~ clus_pam_om6, 
  data= ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens)|> 
  mutate(
    tasa_formateada = sprintf(
      "%s [%s-%s] (%s / %s)",
      gsub("\\.", ",", sprintf("%.2f", rate * 10000)),
      gsub("\\.", ",", sprintf("%.2f", lower * 10000)),
      gsub("\\.", ",", sprintf("%.2f", upper * 10000)),
      event,
      scales::comma(tstop, big.mark = ".", decimal.mark = ",", accuracy = 1)
    )
  )|> 
  dplyr::select(clus_pam_om6, tasa_formateada)|> 
   (\(df) { rownames(df) <- NULL ; df  })()|>
  (\(df) {
        if (interactive()) { t(df) |> rio::export("clipboard") }
        knitr::kable(df, "markdown", caption="Tasas de mortalidad por conglomerado")
      })()

mort_rate_tus_resto<-
biostat3::survRate(Surv(time = death_time,
  event = ifelse(death_time==20,0,1)) ~ clus_pam_om6_rec, 
  data= ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens|> mutate(clus_pam_om6_rec= ifelse(grepl("TUS",clus_pam_om6),1,0)) )

cat("Diferencia multiplicativa entre cluster TSM 1 trimestre y el resto")
epitools::rateratio.midp(c(19, 80,  14650.96, 116453.67))
Call:
survdiff(formula = surv_obj_6c ~ clus_pam_om6, data = ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens)

                                                          N Observed Expected
clus_pam_om6=6623, Un trimestre, TSM(5)                4885       58    73.06
clus_pam_om6=6612, Un trimestre, TUS(4)                 746       19    11.09
clus_pam_om6=6522, Un semestre TSM(2)                   358        8     5.35
clus_pam_om6=6624, TSM, 1 año después, otras causas(6)  239        5     3.58
clus_pam_om6=6574, Comorbilidad un trimestre(3)         224        6     3.32
clus_pam_om6=6268, TSM, 1 año después, TSM(1)           174        3     2.61
                                                       (O-E)^2/E (O-E)^2/V
clus_pam_om6=6623, Un trimestre, TSM(5)                   3.1026   11.8398
clus_pam_om6=6612, Un trimestre, TUS(4)                   5.6468    6.3593
clus_pam_om6=6522, Un semestre TSM(2)                     1.3091    1.3840
clus_pam_om6=6624, TSM, 1 año después, otras causas(6)    0.5678    0.5891
clus_pam_om6=6574, Comorbilidad un trimestre(3)           2.1581    2.2332
clus_pam_om6=6268, TSM, 1 año después, TSM(1)             0.0593    0.0609

 Chisq= 12.8  on 5 degrees of freedom, p= 0.02 

    Pairwise comparisons using Log-Rank test 

data:  ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens and clus_pam_om6 

                                          6623, Un trimestre, TSM(5)
6612, Un trimestre, TUS(4)                0.043                     
6522, Un semestre TSM(2)                  1.000                     
6624, TSM, 1 año después, otras causas(6) 1.000                     
6574, Comorbilidad un trimestre(3)        0.688                     
6268, TSM, 1 año después, TSM(1)          1.000                     
                                          6612, Un trimestre, TUS(4)
6612, Un trimestre, TUS(4)                -                         
6522, Un semestre TSM(2)                  1.000                     
6624, TSM, 1 año después, otras causas(6) 1.000                     
6574, Comorbilidad un trimestre(3)        1.000                     
6268, TSM, 1 año después, TSM(1)          1.000                     
                                          6522, Un semestre TSM(2)
6612, Un trimestre, TUS(4)                -                       
6522, Un semestre TSM(2)                  -                       
6624, TSM, 1 año después, otras causas(6) 1.000                   
6574, Comorbilidad un trimestre(3)        1.000                   
6268, TSM, 1 año después, TSM(1)          1.000                   
                                          6624, TSM, 1 año después, otras causas(6)
6612, Un trimestre, TUS(4)                -                                        
6522, Un semestre TSM(2)                  -                                        
6624, TSM, 1 año después, otras causas(6) -                                        
6574, Comorbilidad un trimestre(3)        1.000                                    
6268, TSM, 1 año después, TSM(1)          1.000                                    
                                          6574, Comorbilidad un trimestre(3)
6612, Un trimestre, TUS(4)                -                                 
6522, Un semestre TSM(2)                  -                                 
6624, TSM, 1 año después, otras causas(6) -                                 
6574, Comorbilidad un trimestre(3)        -                                 
6268, TSM, 1 año después, TSM(1)          1.000                             

P value adjustment method: holm 
Sin siluetas negativasCall:
survdiff(formula = Surv(time = death_time, event = ifelse(death_time == 
    20, 0, 1)) ~ clus_pam_om6, data = subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, 
    !rn %in% sil_neg_pam_om_clus6_q))

                                                          N Observed Expected
clus_pam_om6=6623, Un trimestre, TSM(5)                4885       58    74.24
clus_pam_om6=6612, Un trimestre, TUS(4)                 746       19    11.27
clus_pam_om6=6522, Un semestre TSM(2)                   355        8     5.39
clus_pam_om6=6624, TSM, 1 año después, otras causas(6)  107        5     1.61
clus_pam_om6=6574, Comorbilidad un trimestre(3)         224        6     3.38
clus_pam_om6=6268, TSM, 1 año después, TSM(1)            73        1     1.11
                                                       (O-E)^2/E (O-E)^2/V
clus_pam_om6=6623, Un trimestre, TSM(5)                   3.5515    15.135
clus_pam_om6=6612, Un trimestre, TUS(4)                   5.3063     6.004
clus_pam_om6=6522, Un semestre TSM(2)                     1.2590     1.333
clus_pam_om6=6624, TSM, 1 año después, otras causas(6)    7.0990     7.220
clus_pam_om6=6574, Comorbilidad un trimestre(3)           2.0384     2.112
clus_pam_om6=6268, TSM, 1 año después, TSM(1)             0.0109     0.011

 Chisq= 19.3  on 5 degrees of freedom, p= 0.002 

    Pairwise comparisons using Log-Rank test 

data:  subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens,  and clus_pam_om6     !rn %in% sil_neg_pam_om_clus6_q) and clus_pam_om6 

                                          6623, Un trimestre, TSM(5)
6612, Un trimestre, TUS(4)                0.040                     
6522, Un semestre TSM(2)                  1.000                     
6624, TSM, 1 año después, otras causas(6) 0.021                     
6574, Comorbilidad un trimestre(3)        0.639                     
6268, TSM, 1 año después, TSM(1)          1.000                     
                                          6612, Un trimestre, TUS(4)
6612, Un trimestre, TUS(4)                -                         
6522, Un semestre TSM(2)                  1.000                     
6624, TSM, 1 año después, otras causas(6) 1.000                     
6574, Comorbilidad un trimestre(3)        1.000                     
6268, TSM, 1 año después, TSM(1)          1.000                     
                                          6522, Un semestre TSM(2)
6612, Un trimestre, TUS(4)                -                       
6522, Un semestre TSM(2)                  -                       
6624, TSM, 1 año después, otras causas(6) 1.000                   
6574, Comorbilidad un trimestre(3)        1.000                   
6268, TSM, 1 año después, TSM(1)          1.000                   
                                          6624, TSM, 1 año después, otras causas(6)
6612, Un trimestre, TUS(4)                -                                        
6522, Un semestre TSM(2)                  -                                        
6624, TSM, 1 año después, otras causas(6) -                                        
6574, Comorbilidad un trimestre(3)        1.000                                    
6268, TSM, 1 año después, TSM(1)          1.000                                    
                                          6574, Comorbilidad un trimestre(3)
6612, Un trimestre, TUS(4)                -                                 
6522, Un semestre TSM(2)                  -                                 
6624, TSM, 1 año después, otras causas(6) -                                 
6574, Comorbilidad un trimestre(3)        -                                 
6268, TSM, 1 año después, TSM(1)          1.000                             

P value adjustment method: holm 
Tasas de mortalidad por conglomerado
clus_pam_om6 tasa_formateada
6623, Un trimestre, TSM(5) 5,99 [4,55-7,74] (58 / 96.823)
6612, Un trimestre, TUS(4) 12,97 [7,81-20,25] (19 / 14.651)
6522, Un semestre TSM(2) 11,32 [4,89-22,30] (8 / 7.070)
6624, TSM, 1 año después, otras causas(6) 10,58 [3,44-24,70] (5 / 4.724)
6574, Comorbilidad un trimestre(3) 13,68 [5,02-29,77] (6 / 4.387)
6268, TSM, 1 año después, TSM(1) 8,70 [1,79-25,42] (3 / 3.449)
Diferencia multiplicativa entre cluster TSM 1 trimestre y el resto$data
          Outcome
Predictor  Cases Person-time
  Exposed1    19    14650.96
  Exposed2    80   116453.67
  Total       99   131104.63

$measure
          rate ratio with 95% C.I.
Predictor   estimate     lower     upper
  Exposed1 1.0000000        NA        NA
  Exposed2 0.5262371 0.3261088 0.8946161

$p.value
          two-sided
Predictor  midp.exact       wald
  Exposed1         NA         NA
  Exposed2 0.01919532 0.01134723

attr(,"method")
[1] "Median unbiased estimate & mid-p exact CI"
Código
# Crear el gráfico de Kaplan-Meier con ggplot2
ggplot(km_data_6c, aes(x = time, y = surv, color = strata)) +
  geom_step(size = 1.2) +  # Curvas de supervivencia
  #geom_ribbon(aes(ymin = lower, ymax = upper, fill = strata), alpha = 0.2, color = NA) +  # Intervalos de confianza
  labs(
    title = "Curvas de Kaplan-Meier",
    x = "Tiempo (meses)",
    y = "Probabilidad de Supervivencia",
    color = "Grupo",
    fill = "Grupo"
  ) +
  theme_minimal() +
  theme(legend.position = "bottom") 
1.2.3.c. Comparación covariables- no RM vs. RM
Código
chisq_cramerv(table(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6,ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$codigo_region_rec_base))
# $chisq_statistic
# [1] "44.94"
# 
# $chisq_df
# df 
#  5 
# 
# $chisq_p_value
# [1] "<0.001"
# 
# $cramers_v
# [1] "0.08"

message("Descartando valores negativos en sil width")
chisq_cramerv(
with(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q), table(codigo_region_rec_base , clus_pam_om6))
)
# $chisq_statistic
# [1] "45.19"
# 
# $chisq_df
# df 
#  5 
# 
# $chisq_p_value
# [1] "<0.001"
# 
# $cramers_v
# [1] "0.08"

table(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6,ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$codigo_region_rec_base)|>
    data.frame()|>
    dplyr::group_by(Var1)|>
    dplyr::mutate(perc= scales::percent(Freq/sum(Freq), accuracy=.1))|>
    dplyr::ungroup()|> 
    dplyr::mutate(Freq= Freq)|>
    dplyr::mutate(fp= paste0(Freq, " (", perc,")" ))|>
    dplyr::select(-Freq, -perc)|> 
    tidyr::pivot_wider(names_from="Var2",values_from="fp")|> 
  (\(df) {
        if (interactive()) {mutate(df, across(-1, ~ gsub("%", "", gsub("\\.", ",", .))))|>  dplyr::select(c(1,3)) |> t()|>  rio::export("clipboard")}
        knitr::kable(df, "markdown", caption="Frecuencias absolutas y relativas por fila", col.names= c("Conglomerados", "Fuera de RM", "En RM"))
      })()
$chisq_statistic
[1] "44.94"

$chisq_df
df 
 5 

$chisq_p_value
[1] "<0.001"

$cramers_v
[1] "0.08"

$chisq_statistic
[1] "45.19"

$chisq_df
df 
 5 

$chisq_p_value
[1] "<0.001"

$cramers_v
[1] "0.08"
Frecuencias absolutas y relativas por fila
Conglomerados Fuera de RM En RM
6623, Un trimestre, TSM(5) 2615 (53.5%) 2270 (46.5%)
6612, Un trimestre, TUS(4) 473 (63.4%) 273 (36.6%)
6522, Un semestre TSM(2) 180 (50.3%) 178 (49.7%)
6624, TSM, 1 año después, otras causas(6) 122 (51.0%) 117 (49.0%)
6574, Comorbilidad un trimestre(3) 93 (41.5%) 131 (58.5%)
6268, TSM, 1 año después, TSM(1) 87 (50.0%) 87 (50.0%)
Código
pairwise_chisq_gof_test(table(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6,ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$codigo_region_rec_base), p.adjust.method="holm")|> 
  knitr::kable("markdown", caption="Dependencia categórica sol. 4 conglomerados, por pares de categorías en RM")
Dependencia categórica sol. 4 conglomerados, por pares de categorías en RM
n group1 group2 statistic p df p.adj p.adj.signif
2 grp1 grp2 1485.8044041 0.00e+00 1 0.00e+00 ****
2 grp1 grp3 2121.3685152 0.00e+00 1 0.00e+00 ****
2 grp1 grp4 2270.7522835 0.00e+00 1 0.00e+00 ****
2 grp1 grp5 2348.7754801 0.00e+00 1 0.00e+00 ****
2 grp1 grp6 2365.2050333 0.00e+00 1 0.00e+00 ****
2 grp1 grp7 24.3654043 8.00e-07 1 1.99e-05 ****
2 grp1 grp8 1899.2257618 0.00e+00 1 0.00e+00 ****
2 grp1 grp9 2126.3762979 0.00e+00 1 0.00e+00 ****
2 grp1 grp10 2284.0424597 0.00e+00 1 0.00e+00 ****
2 grp1 grp11 2246.9978150 0.00e+00 1 0.00e+00 ****
2 grp1 grp12 2365.2050333 0.00e+00 1 0.00e+00 ****
2 grp2 grp3 131.4686064 0.00e+00 1 0.00e+00 ****
2 grp2 grp4 207.0605042 0.00e+00 1 0.00e+00 ****
2 grp2 grp5 255.1236749 0.00e+00 1 0.00e+00 ****
2 grp2 grp6 266.0642857 0.00e+00 1 0.00e+00 ****
2 grp2 grp7 1177.2544659 0.00e+00 1 0.00e+00 ****
2 grp2 grp8 53.6193029 0.00e+00 1 0.00e+00 ****
2 grp2 grp9 133.6789555 0.00e+00 1 0.00e+00 ****
2 grp2 grp10 214.8067797 0.00e+00 1 0.00e+00 ****
2 grp2 grp11 193.6490066 0.00e+00 1 0.00e+00 ****
2 grp2 grp12 266.0642857 0.00e+00 1 0.00e+00 ****
2 grp3 grp4 11.1390728 8.45e-04 1 1.69e-02 *
2 grp3 grp5 27.7252747 1.00e-07 1 3.80e-06 ****
2 grp3 grp6 32.3932584 0.00e+00 1 4.00e-07 ****
2 grp3 grp7 1782.8979592 0.00e+00 1 0.00e+00 ****
2 grp3 grp8 19.0927152 1.25e-05 1 2.88e-04 ***
2 grp3 grp9 0.0111732 9.16e-01 1 1.00e+00 ns
2 grp3 grp10 13.3636364 2.57e-04 1 5.65e-03 **
2 grp3 grp11 7.7202572 5.46e-03 1 8.74e-02 ns
2 grp3 grp12 32.3932584 0.00e+00 1 4.00e-07 ****
2 grp4 grp5 3.9116279 4.80e-02 1 4.32e-01 ns
2 grp4 grp6 5.8612440 1.55e-02 1 2.02e-01 ns
2 grp4 grp7 1928.8896321 0.00e+00 1 0.00e+00 ****
2 grp4 grp8 57.7240506 0.00e+00 1 0.00e+00 ****
2 grp4 grp9 10.4533333 1.22e-03 1 2.32e-02 *
2 grp4 grp10 0.1046025 7.46e-01 1 1.00e+00 ns
2 grp4 grp11 0.3201581 5.72e-01 1 1.00e+00 ns
2 grp4 grp12 5.8612440 1.55e-02 1 2.02e-01 ns
2 grp5 grp6 0.2000000 6.55e-01 1 1.00e+00 ns
2 grp5 grp7 2005.6407110 0.00e+00 1 0.00e+00 ****
2 grp5 grp8 88.5245902 0.00e+00 1 0.00e+00 ****
2 grp5 grp9 26.6605166 2.00e-07 1 6.30e-06 ****
2 grp5 grp10 2.7428571 9.77e-02 1 7.82e-01 ns
2 grp5 grp11 6.4464286 1.11e-02 1 1.55e-01 ns
2 grp5 grp12 0.2000000 6.55e-01 1 1.00e+00 ns
2 grp6 grp7 2021.8451421 0.00e+00 1 0.00e+00 ****
2 grp6 grp8 96.1000000 0.00e+00 1 0.00e+00 ****
2 grp6 grp9 31.2490566 0.00e+00 1 7.00e-07 ****
2 grp6 grp10 4.4117647 3.57e-02 1 3.93e-01 ns
2 grp6 grp11 8.8807339 2.88e-03 1 5.18e-02 ns
2 grp6 grp12 0.0000000 1.00e+00 1 1.00e+00 ns
2 grp7 grp8 1568.2300433 0.00e+00 1 0.00e+00 ****
2 grp7 grp9 1787.7712418 0.00e+00 1 0.00e+00 ****
2 grp7 grp10 1941.9392543 0.00e+00 1 0.00e+00 ****
2 grp7 grp11 1905.5897543 0.00e+00 1 0.00e+00 ****
2 grp7 grp12 2021.8451421 0.00e+00 1 0.00e+00 ****
2 grp8 grp9 20.0110865 7.70e-06 1 1.85e-04 ***
2 grp8 grp10 62.4000000 0.00e+00 1 0.00e+00 ****
2 grp8 grp11 49.9108911 0.00e+00 1 0.00e+00 ****
2 grp8 grp12 96.1000000 0.00e+00 1 0.00e+00 ****
2 grp9 grp10 12.6135593 3.83e-04 1 8.04e-03 **
2 grp9 grp11 7.1488673 7.50e-03 1 1.12e-01 ns
2 grp9 grp12 31.2490566 0.00e+00 1 7.00e-07 ****
2 grp10 grp11 0.7903226 3.74e-01 1 1.00e+00 ns
2 grp10 grp12 4.4117647 3.57e-02 1 3.93e-01 ns
2 grp11 grp12 8.8807339 2.88e-03 1 5.18e-02 ns
Código
chisq.posthoc.test(table(
    ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6,
    ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$codigo_region_rec_base
  ))|> 
  (\(df) { dplyr::mutate_at(df, 3:ncol(df), ~ round(as.numeric(gsub("\\*", "", .)), 3))
  })()|>
  group_by(Dimension)|>
  (\(df) { summarise(df, across(2:(ncol(df)-1), ~ paste0(first(sprintf("%1.2f", .)), " (p=", last(sprintf("%1.3f", .)), ")")))
  })()|>
  (\(df) { dplyr::mutate_at(df, 2:length(names(df)), ~ gsub("p\\=0.000)", "p<0.001)", .))
  })()|>
  knitr::kable("markdown", caption = "Comparación post-hoc, conglomerado-RM vs. No-RM")
Comparación post-hoc, conglomerado-RM vs. No-RM
Dimension noRM RM
6268, TSM, 1 año después, TSM(1) -1.04 (p=1.000) 1.04 (p=1.000)
6522, Un semestre TSM(2) -1.40 (p=1.000) 1.40 (p=1.000)
6574, Comorbilidad un trimestre(3) -3.78 (p=0.002) 3.78 (p=0.002)
6612, Un trimestre, TUS(4) 5.54 (p<0.001) -5.54 (p<0.001)
6623, Un trimestre, TSM(5) -0.95 (p=1.000) 0.95 (p=1.000)
6624, TSM, 1 año después, otras causas(6) -0.90 (p=1.000) 0.90 (p=1.000)
1.2.3.e. Comparación covariables- Región
Código
tab_cluster_region_pam_om6_q<-
ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens|>
  dplyr::inner_join(data_long_establecimiento_2024_std[,c("ESTAB_HOMO", "codigo_region", "nivel_de_atencion", "nivel_de_complejidad")], 
                    by = c("estab_homo_base" = "ESTAB_HOMO"), multiple = "first")|> 
  janitor::tabyl(codigo_region, clus_pam_om6)|> 
  janitor::adorn_percentages("col")|> 
  janitor::adorn_rounding(digits = 2)

#colnames(tab_cluster_region_pam_om4_q)<- c("reg", "c1", "c4", "c3", "c5", "c6", "c7", "c8", "c9", "c2")
cod_reg_homo_pam_om6_q<-
data.frame(
  codigo_region = 1:16,
  nombre_region = c(
    "Región de Tarapacá",
    "Región de Antofagasta",
    "Región de Atacama",
    "Región de Coquimbo",
    "Región de Valparaíso",
    "Región del Libertador General Bernardo O'Higgins",
    "Región del Maule",
    "Región del Biobío",
    "Región de La Araucanía",
    "Región de Los Lagos",
    "Región de Aysén del General Carlos Ibáñez del Campo",
    "Región de Magallanes y de la Antártica Chilena",
    "Región Metropolitana de Santiago",
    "Región de Los Ríos",
    "Región de Arica y Parinacota",
    "Región de Ñuble"
  ),
  stringsAsFactors = FALSE
)

dplyr::mutate(tab_cluster_region_pam_om6_q, promedio_fila = rowMeans(across(2:length(colnames(tab_cluster_region_pam_om6_q))))) |> 
  dplyr::arrange(desc(promedio_fila)) |> 
  dplyr::left_join(cod_reg_homo_pam_om6_q, by="codigo_region") |> 
  dplyr::select(codigo_region, nombre_region, everything()) |> 
  dplyr::select(-promedio_fila)|> 
  dplyr::mutate_at(3:(length(colnames(tab_cluster_region_pam_om6_q))+1),~scales::percent(.))|> 
  knitr::kable(caption="Porcentaje por región")
Porcentaje por región
codigo_region nombre_region 6623, Un trimestre, TSM(5) 6612, Un trimestre, TUS(4) 6522, Un semestre TSM(2) 6624, TSM, 1 año después, otras causas(6) 6574, Comorbilidad un trimestre(3) 6268, TSM, 1 año después, TSM(1)
13 Región Metropolitana de Santiago 45% 35% 48% 44% 57% 44%
8 Región del Biobío 10% 8% 9% 13% 9% 11%
5 Región de Valparaíso 8% 13% 10% 7% 7% 7%
10 Región de Los Lagos 6% 20% 4% 7% 10% 3%
9 Región de La Araucanía 5% 4% 6% 3% 5% 5%
7 Región del Maule 4% 3% 2% 6% 4% 5%
6 Región del Libertador General Bernardo O’Higgins 4% 3% 5% 4% 2% 1%
2 Región de Antofagasta 2% 1% 4% 1% 1% 5%
12 Región de Magallanes y de la Antártica Chilena 1% 2% 2% 3% 1% 5%
1 Región de Tarapacá 2% 1% 2% 2% 1% 5%
14 Región de Los Ríos 3% 3% 2% 3% 0% 2%
16 Región de Ñuble 2% 2% 2% 3% 1% 3%
11 Región de Aysén del General Carlos Ibáñez del Campo 2% 2% 1% 1% 3% 1%
3 Región de Atacama 2% 1% 3% 1% 0% 1%
15 Región de Arica y Parinacota 2% 0% 0% 2% 0% 2%
4 Región de Coquimbo 1% 1% 1% 1% 0% 1%
Código
tab_clus_reg_pam_om6_q<-
ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens|>
    dplyr::inner_join(data_long_establecimiento_2024_std[,c("ESTAB_HOMO", "codigo_region", "nivel_de_atencion", "nivel_de_complejidad")], 
                      by = c("estab_homo_base" = "ESTAB_HOMO"), multiple = "first")|>
    janitor::tabyl(codigo_region, clus_pam_om6)

chisq_cramerv(tab_clus_reg_pam_om6_q[,-1])
# $chisq_statistic
# [1] "319.89"
# 
# $chisq_df
# df 
# 75 
# 
# $chisq_p_value
# [1] "<0.001"
# 
# $cramers_v
# [1] "0.10"

janitor::fisher.test(tab_clus_reg_pam_om6_q, simulate.p.value=T, B=1e5)
#p-value = 1e-05

cat("Descartando valores negativos en sil width")
chisq_cramerv(
with(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q)|>
    dplyr::inner_join(data_long_establecimiento_2024_std[,c("ESTAB_HOMO", "codigo_region", "nivel_de_atencion", "nivel_de_complejidad")], by = c("estab_homo_base" = "ESTAB_HOMO"), multiple = "first") , table(codigo_region , clus_pam_om6))
)
# $chisq_statistic
# [1] "305.07"
# 
# $chisq_df
# df 
# 75 
# 
# $chisq_p_value
# [1] "<0.001"
# 
# $cramers_v
# [1] "0.10"
$chisq_statistic
[1] "319.89"

$chisq_df
df 
75 

$chisq_p_value
[1] "<0.001"

$cramers_v
[1] "0.10"


    Fisher's Exact Test for Count Data with simulated p-value (based on
    1e+05 replicates)

data:  tab_clus_reg_pam_om6_q
p-value = 1e-05
alternative hypothesis: two.sided

Descartando valores negativos en sil width$chisq_statistic
[1] "305.07"

$chisq_df
df 
75 

$chisq_p_value
[1] "<0.001"

$cramers_v
[1] "0.10"
Por macrozona
Código
tab_clus_macrozona_pam_om6_q<-
ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens|>
  dplyr::inner_join(data_long_establecimiento_2024_std[,c("ESTAB_HOMO", "codigo_region", "nivel_de_atencion", "nivel_de_complejidad")], 
                    by = c("estab_homo_base" = "ESTAB_HOMO"), multiple = "first")|>
dplyr::mutate(macrozona = dplyr::case_when(
  codigo_region %in% c(15, 1, 2, 3) ~ "Macrozona Norte",
  codigo_region %in% c(4, 5)~ "Macrozona Centro",
  codigo_region %in% c(6, 7, 16, 8) ~ "Macrozona Centro Sur",
  codigo_region %in% c(9, 14, 10) ~ "Macrozona Sur",
  codigo_region %in% c(11, 12) ~ "Macrozona Austral",
  TRUE ~ "RM"  # En caso de que algún código no esté especificado
))|>
  janitor::tabyl(macrozona, clus_pam_om6) 

chisq_cramerv(dplyr::filter(tab_clus_macrozona_pam_om6_q,macrozona!="RM")[,-1])
# $chisq_statistic
# [1] "111.41"
# 
# $chisq_df
# df 
# 20 
# 
# $chisq_p_value
# [1] "<0.001"
# 
# $cramers_v
# [1] "0.09"


cat("Descartando valores negativos en sil width")
chisq_cramerv(
with(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q)|>
  dplyr::inner_join(data_long_establecimiento_2024_std[,c("ESTAB_HOMO", "codigo_region", "nivel_de_atencion", "nivel_de_complejidad")], 
                    by = c("estab_homo_base" = "ESTAB_HOMO"), multiple = "first")|>
dplyr::mutate(macrozona = dplyr::case_when(
  codigo_region %in% c(15, 1, 2, 3) ~ "Macrozona Norte",
  codigo_region %in% c(4, 5)~ "Macrozona Centro",
  codigo_region %in% c(6, 7, 16, 8) ~ "Macrozona Centro Sur",
  codigo_region %in% c(9, 14, 10) ~ "Macrozona Sur",
  codigo_region %in% c(11, 12) ~ "Macrozona Austral",
  TRUE ~ "RM"  # En caso de que algún código no esté especificado
))|> dplyr::filter(macrozona!="RM"), table(macrozona, clus_pam_om6))
)
# $chisq_statistic
# [1] "108.52"
# 
# $chisq_df
# df 
# 20 
# 
# $chisq_p_value
# [1] "<0.001"
# 
# $cramers_v
# [1] "0.09"


fisher.test(
with(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q)|>
  dplyr::inner_join(data_long_establecimiento_2024_std[,c("ESTAB_HOMO", "codigo_region", "nivel_de_atencion", "nivel_de_complejidad")], 
                    by = c("estab_homo_base" = "ESTAB_HOMO"), multiple = "first")|>
dplyr::mutate(macrozona = dplyr::case_when(
  codigo_region %in% c(15, 1, 2, 3) ~ "Macrozona Norte",
  codigo_region %in% c(4, 5)~ "Macrozona Centro",
  codigo_region %in% c(6, 7, 16, 8) ~ "Macrozona Centro Sur",
  codigo_region %in% c(9, 14, 10) ~ "Macrozona Sur",
  codigo_region %in% c(11, 12) ~ "Macrozona Austral",
  TRUE ~ "RM"  # En caso de que algún código no esté especificado
)) |> dplyr::filter(macrozona!="RM"), table(macrozona, clus_pam_om6)),simulate.p.value=T, B=1e5
)

tab_clus_macrozona_pam_om6_q|> 
  dplyr::filter(macrozona!="RM")|> 
  janitor::adorn_percentages("col")|> 
  janitor::adorn_rounding(digits = 3)|> 
    dplyr::mutate(across(-macrozona, ~ sprintf("%d (%.1f%%)", 
  dplyr::filter(tab_clus_macrozona_pam_om6_q,macrozona!="RM")[[cur_column()]], . * 100)))|>
  mutate(macrozona = factor(macrozona, levels = c("Macrozona Norte", "Macrozona Centro", "Macrozona Centro Sur", "Macrozona Sur", "Macrozona Austral")))|> 
  arrange(macrozona)|>
  (\(df) {
  if (interactive()) {mutate(df, across(-macrozona, ~ gsub("%", "", gsub("\\.", ",", .))))|> rio::export("clipboard")}
  knitr::kable(df, caption="Porcentajes por columna, conglomerado vs. macrozona")
  })()
$chisq_statistic
[1] "111.41"

$chisq_df
df 
20 

$chisq_p_value
[1] "<0.001"

$cramers_v
[1] "0.09"

Descartando valores negativos en sil width$chisq_statistic
[1] "108.52"

$chisq_df
df 
20 

$chisq_p_value
[1] "<0.001"

$cramers_v
[1] "0.09"


    Fisher's Exact Test for Count Data with simulated p-value (based on
    1e+05 replicates)

data:  with(dplyr::filter(dplyr::mutate(dplyr::inner_join(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q), data_long_establecimiento_2024_std[, c("ESTAB_HOMO", "codigo_region", "nivel_de_atencion", "nivel_de_complejidad")], by = c(estab_homo_base = "ESTAB_HOMO"), multiple = "first"), macrozona = dplyr::case_when(codigo_region %in% c(15, 1, 2, 3) ~ "Macrozona Norte", codigo_region %in% c(4, 5) ~ "Macrozona Centro", codigo_region %in% c(6, 7, 16, 8) ~      "Macrozona Centro Sur", codigo_region %in% c(9, 14, 10) ~ "Macrozona Sur", codigo_region %in% c(11, 12) ~ "Macrozona Austral", TRUE ~ "RM")), macrozona != "RM"), table(macrozona, clus_pam_om6))
p-value = 1e-05
alternative hypothesis: two.sided
Porcentajes por columna, conglomerado vs. macrozona
macrozona 6623, Un trimestre, TSM(5) 6612, Un trimestre, TUS(4) 6522, Un semestre TSM(2) 6624, TSM, 1 año después, otras causas(6) 6574, Comorbilidad un trimestre(3) 6268, TSM, 1 año después, TSM(1)
Macrozona Norte 409 (15.2%) 30 (6.2%) 30 (16.0%) 14 (10.4%) 5 (5.2%) 20 (20.6%)
Macrozona Centro 459 (17.1%) 102 (21.1%) 39 (20.9%) 19 (14.1%) 15 (15.5%) 14 (14.4%)
Macrozona Centro Sur 980 (36.4%) 122 (25.3%) 67 (35.8%) 62 (45.9%) 35 (36.1%) 35 (36.1%)
Macrozona Sur 678 (25.2%) 200 (41.4%) 42 (22.5%) 31 (23.0%) 34 (35.1%) 18 (18.6%)
Macrozona Austral 164 (6.1%) 29 (6.0%) 9 (4.8%) 9 (6.7%) 8 (8.2%) 10 (10.3%)
Código
chisq.posthoc.test(dplyr::filter(tab_clus_macrozona_pam_om6_q, macrozona != "RM")[-1])|>
  (\(df) {dplyr::mutate_at(df, 3:ncol(df), ~ round(as.numeric(gsub("\\*", "", .)), 3))})()|>
  group_by(Dimension)|>
  (\(df) {summarise(df, across(2:(ncol(df) - 1), ~paste0(first(sprintf("%1.2f", .)), " (p=", last(sprintf("%1.3f", .)), ")")))})()|>
  (\(df) {dplyr::mutate_at(df, 2:length(names(df)), ~gsub("p\\=0.000)", "p<0.001)", .))})()|>
  dplyr::mutate(Dimension= dplyr::filter(tab_clus_macrozona_pam_om6_q, macrozona!="RM") |> pull(macrozona))|>
  mutate(Dimension = factor(Dimension, levels = c("Macrozona Norte", "Macrozona Centro", "Macrozona Centro Sur", "Macrozona Sur", "Macrozona Austral")))|> 
  arrange(Dimension)|>
  knitr::kable("markdown", caption = "Comparación post-hoc, conglomerado-Macrozona")
Comparación post-hoc, conglomerado-Macrozona
Dimension 6623, Un trimestre, TSM(5) 6612, Un trimestre, TUS(4) 6522, Un semestre TSM(2) 6624, TSM, 1 año después, otras causas(6) 6574, Comorbilidad un trimestre(3) 6268, TSM, 1 año después, TSM(1)
Macrozona Norte 4.15 (p=0.001) -5.17 (p<0.001) 0.92 (p=1.000) -1.17 (p=1.000) -2.50 (p=0.377) 1.98 (p=1.000)
Macrozona Centro -1.32 (p=1.000) 2.20 (p=0.833) 1.21 (p=1.000) -1.09 (p=1.000) -0.55 (p=1.000) -0.82 (p=1.000)
Macrozona Centro Sur 2.43 (p=0.455) -4.94 (p<0.001) 0.16 (p=1.000) 2.64 (p=0.248) 0.17 (p=1.000) 0.17 (p=1.000)
Macrozona Sur -4.45 (p<0.001) 7.53 (p<0.001) -1.49 (p=1.000) -1.12 (p=1.000) 1.76 (p=1.000) -1.94 (p=1.000)
Macrozona Austral -0.46 (p=1.000) -0.20 (p=1.000) -0.81 (p=1.000) 0.22 (p=1.000) 0.84 (p=1.000) 1.70 (p=1.000)
Código
pairwise_chisq_gof_test(dplyr::filter(tab_clus_macrozona_pam_om6_q,macrozona!="RM")[-1], p.adjust.method="holm")|>
  knitr::kable("markdown", caption="Dependencia categórica sol. 6 conglomerados, por pares de categorías en Macrozona (corrección Holm-Bonferroni)")

#Groups sharing a letter are not significantlt different (alpha = 0.05)
Dependencia categórica sol. 6 conglomerados, por pares de categorías en Macrozona (corrección Holm-Bonferroni)
n group1 group2 statistic p df p.adj p.adj.signif
3173 6623, Un trimestre, TSM(5) 6612, Un trimestre, TUS(4) 81.319841 0.00e+00 4 0.00e+00 ****
2877 6623, Un trimestre, TSM(5) 6522, Un semestre TSM(2) 2.556245 6.35e-01 4 1.00e+00 ns
2825 6623, Un trimestre, TSM(5) 6624, TSM, 1 año después, otras causas(6) 6.152376 1.88e-01 4 1.00e+00 ns
2787 6623, Un trimestre, TSM(5) 6574, Comorbilidad un trimestre(3) 10.764816 2.93e-02 4 2.64e-01 ns
2787 6623, Un trimestre, TSM(5) 6268, TSM, 1 año después, TSM(1) 6.485621 1.66e-01 4 1.00e+00 ns
670 6612, Un trimestre, TUS(4) 6522, Un semestre TSM(2) 33.631614 9.00e-07 4 1.15e-05 ****
618 6612, Un trimestre, TUS(4) 6624, TSM, 1 año después, otras causas(6) 30.052430 4.80e-06 4 5.74e-05 ****
580 6612, Un trimestre, TUS(4) 6574, Comorbilidad un trimestre(3) 6.371698 1.73e-01 4 1.00e+00 ns
580 6612, Un trimestre, TUS(4) 6268, TSM, 1 año después, TSM(1) 38.199650 1.00e-07 4 1.40e-06 ****
322 6522, Un semestre TSM(2) 6624, TSM, 1 año después, otras causas(6) 6.333730 1.76e-01 4 1.00e+00 ns
284 6522, Un semestre TSM(2) 6574, Comorbilidad un trimestre(3) 12.164462 1.62e-02 4 1.62e-01 ns
284 6522, Un semestre TSM(2) 6268, TSM, 1 año después, TSM(1) 5.517252 2.38e-01 4 1.00e+00 ns
232 6624, TSM, 1 año después, otras causas(6) 6574, Comorbilidad un trimestre(3) 6.393894 1.72e-01 4 1.00e+00 ns
232 6624, TSM, 1 año después, otras causas(6) 6268, TSM, 1 año después, TSM(1) 6.791541 1.47e-01 4 1.00e+00 ns
194 6574, Comorbilidad un trimestre(3) 6268, TSM, 1 año después, TSM(1) 14.179782 6.74e-03 4 7.41e-02 ns
1.2.3.f. Comparación covariables- Sexo
Código
tab_clus_sexo_pam_om6_q<-  
  ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens|>
    janitor::tabyl(glosa_sexo, clus_pam_om6)

chisq_cramerv(tab_clus_sexo_pam_om6_q[,-1])
# $chisq_statistic
# [1] "276.32"
# 
# $chisq_df
# df 
#  5 
# 
# $chisq_p_value
# [1] "<0.001"
# 
# $cramers_v
# [1] "0.20"
#  
cat("Descartando valores negativos en sil width")
chisq_cramerv(with(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q), table(glosa_sexo, clus_pam_om6))
)
# $chisq_statistic
# [1] "268.10"
# 
# $chisq_df
# df 
#  5 
# 
# $chisq_p_value
# [1] "<0.001"
# 
# $cramers_v
# [1] "0.20"

tab_clus_sexo_pam_om6_q|>
  janitor::adorn_percentages("col")|>
  janitor::adorn_rounding(digits = 3)|>
  dplyr::mutate(across(-glosa_sexo, ~sprintf("%d (%.1f%%)", tab_clus_sexo_pam_om6_q[[cur_column()]],.*100)))|> 
  (\(df) {
        if (interactive()) {mutate(df, across(-1, ~ gsub("%", "", gsub("\\.", ",", .))))|>  slice(2) |> rio::export("clipboard")}
        knitr::kable(df, "markdown", caption="Porcentajes por columna, conglomerado vs. sexo")
      })()
$chisq_statistic
[1] "276.32"

$chisq_df
df 
 5 

$chisq_p_value
[1] "<0.001"

$cramers_v
[1] "0.20"

Descartando valores negativos en sil width$chisq_statistic
[1] "268.10"

$chisq_df
df 
 5 

$chisq_p_value
[1] "<0.001"

$cramers_v
[1] "0.20"
Porcentajes por columna, conglomerado vs. sexo
glosa_sexo 6623, Un trimestre, TSM(5) 6612, Un trimestre, TUS(4) 6522, Un semestre TSM(2) 6624, TSM, 1 año después, otras causas(6) 6574, Comorbilidad un trimestre(3) 6268, TSM, 1 año después, TSM(1)
HOMBRE 2034 (41.6%) 519 (69.6%) 142 (39.7%) 82 (34.3%) 156 (69.6%) 68 (39.1%)
MUJER 2851 (58.4%) 227 (30.4%) 216 (60.3%) 157 (65.7%) 68 (30.4%) 106 (60.9%)
Código
chisq.posthoc.test(tab_clus_sexo_pam_om6_q[-1])|> 
  dplyr::mutate(Dimension = rep(c("HOMBRE", "MUJER"), each=2)) |> 
  dplyr::filter(Dimension == "MUJER") |>
  (\(df) dplyr::mutate(df, across(3:ncol(df), ~ dplyr::case_when(
    Value == "Residuals" ~ sprintf("%1.2f", as.numeric(.x)), 
    Value == "p values" ~ sprintf("%1.3f", as.numeric(gsub("\\*", "", .x)))
  ))))()|>
  (\(df) dplyr::mutate(df, across(3:ncol(df), ~ dplyr::case_when(
    Value == "p values" & .x == "0.000" ~ "<0.001", TRUE ~ .x
  ))))()|>
  t()|>
  (\(df) {
    colnames(df) <- df[1, ]
    df[-1, , drop = FALSE]
  })()|> 
  knitr::kable("markdown", caption="Post-hoc, conglomerado vs. sexo")
Post-hoc, conglomerado vs. sexo
MUJER MUJER
Value Residuals p values
6623, Un trimestre, TSM(5) 10.01 <0.001
6612, Un trimestre, TUS(4) -14.14 <0.001
6522, Un semestre TSM(2) 2.20 0.335
6624, TSM, 1 año después, otras causas(6) 3.47 0.006
6574, Comorbilidad un trimestre(3) -7.45 <0.001
6268, TSM, 1 año después, TSM(1) 1.67 1.000
Código
pairwise_chisq_gof_test(tab_clus_sexo_pam_om6_q[-1], p.adjust.method="holm")|> 
  dplyr::mutate(p= dplyr::case_when(p<0.001~ "<0.001",T~ sprintf("%1.3f",p)))|> 
  dplyr::mutate(p.adj= dplyr::case_when(p.adj<0.001~ "<0.001",T~ sprintf("%1.3f",p.adj)))|> 
  knitr::kable("markdown", caption="Dependencia categórica sol. 7 conglomerados, por pares de categorías en Sexo (corrección Holm-Bonferroni)") 
Dependencia categórica sol. 7 conglomerados, por pares de categorías en Sexo (corrección Holm-Bonferroni)
n group1 group2 statistic p df p.adj p.adj.signif
5631 6623, Un trimestre, TSM(5) 6612, Un trimestre, TUS(4) 202.6332606 <0.001 1 <0.001 ****
5243 6623, Un trimestre, TSM(5) 6522, Un semestre TSM(2) 0.4565726 0.499 1 1.000 ns
5124 6623, Un trimestre, TSM(5) 6624, TSM, 1 año después, otras causas(6) 4.7494853 0.029 1 0.205 ns
5109 6623, Un trimestre, TSM(5) 6574, Comorbilidad un trimestre(3) 67.4491523 <0.001 1 <0.001 ****
5059 6623, Un trimestre, TSM(5) 6268, TSM, 1 año después, TSM(1) 0.3532346 0.552 1 1.000 ns
1104 6612, Un trimestre, TUS(4) 6522, Un semestre TSM(2) 88.8148412 <0.001 1 <0.001 ****
985 6612, Un trimestre, TUS(4) 6624, TSM, 1 año después, otras causas(6) 93.1399093 <0.001 1 <0.001 ****
970 6612, Un trimestre, TUS(4) 6574, Comorbilidad un trimestre(3) 0.0000000 1.000 1 1.000 ns
920 6612, Un trimestre, TUS(4) 6268, TSM, 1 año después, TSM(1) 55.4843754 <0.001 1 <0.001 ****
597 6522, Un semestre TSM(2) 6624, TSM, 1 año después, otras causas(6) 1.5322658 0.216 1 1.000 ns
582 6522, Un semestre TSM(2) 6574, Comorbilidad un trimestre(3) 48.3668708 <0.001 1 <0.001 ****
532 6522, Un semestre TSM(2) 6268, TSM, 1 año después, TSM(1) 0.0012130 0.972 1 1.000 ns
463 6624, TSM, 1 año después, otras causas(6) 6574, Comorbilidad un trimestre(3) 56.3817508 <0.001 1 <0.001 ****
413 6624, TSM, 1 año después, otras causas(6) 6268, TSM, 1 año después, TSM(1) 0.7953808 0.372 1 1.000 ns
398 6574, Comorbilidad un trimestre(3) 6268, TSM, 1 año después, TSM(1) 35.9438692 <0.001 1 <0.001 ****
1.2.3.g. Comparación covariables- Edad
Código
dt_ing_calendar_quarter_t_desde_primera_adm_dedup |>
    dplyr::filter(quarter == 0) |>
    dplyr::inner_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run","clus_pam_om6")], by="run") |>
    dplyr::group_by(clus_pam_om6) |>
    dplyr::summarise(mean_edad = mean(min_edad_anos),
                     sd= sd(min_edad_anos),
                     p50= quantile(min_edad_anos,.5),
                     p25 = quantile(min_edad_anos, 0.25),
                     p75 = quantile(min_edad_anos, 0.75)) |>
    dplyr::mutate(sum= paste0(sprintf("%1.2f",mean_edad), " ± ", sprintf("%1.2f",sd), " ; ",p50," [",p25,", ",p75,"]"))|> 
    dplyr::select(clus_pam_om6, sum)|>
   (\(df) {
     if (interactive()) {mutate(df, across(-clus_pam_om6, ~gsub("\\.", ",", .)))|> rio::export("clipboard")}
     knitr::kable(df, caption="Descriptivos, edad minima de ingreso por conglomerado", digits=2)
  })()
Descriptivos, edad minima de ingreso por conglomerado
clus_pam_om6 sum
6623, Un trimestre, TSM(5) 20.60 ± 4.34 ; 20 [17, 24]
6612, Un trimestre, TUS(4) 22.42 ± 4.30 ; 23 [19, 26]
6522, Un semestre TSM(2) 19.89 ± 4.26 ; 19 [16, 23]
6624, TSM, 1 año después, otras causas(6) 20.49 ± 4.13 ; 20 [17, 23]
6574, Comorbilidad un trimestre(3) 21.86 ± 4.20 ; 21 [18, 25]
6268, TSM, 1 año después, TSM(1) 20.08 ± 4.26 ; 19 [16, 23]
Código
 dt_ing_calendar_quarter_t_desde_primera_adm_dedup|> 
  filter(quarter == 0)|> 
  inner_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[, c("run", "clus_pam_om6")],
             by = "run")|>
  dplyr::mutate(clus_pam_om6= str_wrap(clus_pam_om6, width = 20))|> 
  dplyr::group_by(clus_pam_om6)|> 
  dplyr::summarise(mean_edad = mean(min_edad_anos),
            sd_edad   = sd(min_edad_anos),
            n         = n())|> 
  dplyr::mutate(sem         = sd_edad / sqrt(n),
         error_lower = mean_edad - sem,
         error_upper = mean_edad + sem)|> 
  ggplot(aes(x = clus_pam_om6, y = mean_edad)) +
  geom_point(color = "black", size = 3) +
  geom_errorbar(aes(ymin = error_lower, ymax = error_upper), width = 0.2, color = "black") +
  labs(x = "Conglomerado (k = 4)", y = "Edad al primer evento 2018 promedio") +
  theme_minimal() +
  coord_flip() +
  theme(axis.text.y = element_text(size = 17 * .7, face = "bold"),
        axis.text.x = element_text(size = 17 * .7, face = "bold", lineheight = 0.9),
        axis.title.x = element_text(size = 16 * .7, face = "bold"),
        axis.title.y = element_text(size = 16 * .7, face = "bold"),
        plot.margin = unit(c(0.5, 0.5, 0.5, 0.5), "cm"))

ggsave("_figs/edad_minima_por_cluster_pam_om6_q_25.png", width=8, height=5, dpi=600)
Edad promedio primer ingreso con intervalo de confianza por conglomerado

Edad promedio primer ingreso con intervalo de confianza por conglomerado

Código
invisible("Prueba de Levene par igualdad de varianzas")
with(dt_ing_calendar_quarter_t_desde_primera_adm_dedup %>%
               dplyr::filter(quarter == 0) %>%
               dplyr::inner_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run","clus_pam_om6")], by="run"), car::leveneTest(min_edad_anos, clus_pam_om6))
#Sig.
anova_clus_pam_om6_q <- oneway.test(min_edad_anos ~ clus_pam_om6, 
             data = dt_ing_calendar_quarter_t_desde_primera_adm_dedup %>%
               dplyr::filter(quarter == 0) %>%
               dplyr::inner_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run","clus_pam_om6")], by="run"),var.equal = T)


#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:
#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:

with(dt_ing_calendar_quarter_t_desde_primera_adm_dedup %>%
               dplyr::filter(quarter == 0) %>%
               dplyr::inner_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run","clus_pam_om6")], by="run"), oneway_anova_effect_size (min_edad_anos, clus_pam_om6))
# eta ^2 [1] 0.02228232


# Ver los resultados del ANOVA
print(anova_clus_pam_om6_q)
#F = 30.174, num df = 5, denom df = 6620, p-value < 2.2e-16

cat("Descartando valores negativos en sil width")
with(dt_ing_calendar_quarter_t_desde_primera_adm_dedup %>%
    dplyr::filter(quarter == 0) %>%
    dplyr::inner_join(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q)[,c("run","clus_pam_om6")], by="run"), 
     oneway.test(min_edad_anos ~ clus_pam_om6,var.equal = F)
     )
#F = 29.5, num df = 5.00, denom df = 383.94, p-value < 2.2e-16
Levene's Test for Homogeneity of Variance (center = median)
        Df F value Pr(>F)
group    5  1.1069 0.3543
      6620               
$anova_summary
              Df Sum Sq Mean Sq F value Pr(>F)    
group          5   2810   561.9   30.17 <2e-16 ***
Residuals   6620 123280    18.6                   
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

$eta_squared
[1] 0.02228232


    One-way analysis of means

data:  min_edad_anos and clus_pam_om6
F = 30.174, num df = 5, denom df = 6620, p-value < 2.2e-16

Descartando valores negativos en sil width
    One-way analysis of means (not assuming equal variances)

data:  min_edad_anos and clus_pam_om6
F = 29.5, num df = 5.00, denom df = 383.94, p-value < 2.2e-16
Código
rstatix::games_howell_test(min_edad_anos ~ clus_pam_om6, 
  data =dt_ing_calendar_quarter_t_desde_primera_adm_dedup %>%
               dplyr::filter(quarter == 0) %>%
               dplyr::inner_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run","clus_pam_om6")], by="run"))|>
    dplyr::select(-1)|>
    dplyr::mutate(
    summary = sprintf(
      "%.2f [%.2f, %.2f], p= %s",
      as.numeric(estimate), 
      as.numeric(conf.low), 
      as.numeric(conf.high), 
      ifelse(p.adj < 0.001, "<0.001", sprintf("%.3f", p.adj))))|>
  dplyr::select(!any_of(c("estimate","conf.low", "conf.high", "p.adj", "p.adj.signif")))|>
  knitr::kable("markdown", col.names=c("Conglomerado1","Conglomerado2", "Estimación"), caption="Post-hoc, conglomerado vs. Promedio días de tratamiento")


cat("Descartando valores negativos en sil width")
sens_min_anios_clus_pam_om6_q<-
rstatix::games_howell_test(min_edad_anos ~ clus_pam_om6,data = dt_ing_calendar_quarter_t_desde_primera_adm_dedup %>%
    dplyr::filter(quarter == 0) %>%
    dplyr::inner_join(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q)[,c("run","clus_pam_om6")], by="run")
     )
Post-hoc, conglomerado vs. Promedio días de tratamiento
Conglomerado1 Conglomerado2 Estimación
6623, Un trimestre, TSM(5) 6612, Un trimestre, TUS(4) 1.82 [1.34, 2.30], p= <0.001
6623, Un trimestre, TSM(5) 6522, Un semestre TSM(2) -0.71 [-1.38, -0.04], p= 0.031
6623, Un trimestre, TSM(5) 6624, TSM, 1 año después, otras causas(6) -0.11 [-0.90, 0.68], p= 0.999
6623, Un trimestre, TSM(5) 6574, Comorbilidad un trimestre(3) 1.26 [0.43, 2.08], p= <0.001
6623, Un trimestre, TSM(5) 6268, TSM, 1 año después, TSM(1) -0.52 [-1.46, 0.43], p= 0.614
6612, Un trimestre, TUS(4) 6522, Un semestre TSM(2) -2.53 [-3.31, -1.74], p= <0.001
6612, Un trimestre, TUS(4) 6624, TSM, 1 año después, otras causas(6) -1.93 [-2.82, -1.04], p= <0.001
6612, Un trimestre, TUS(4) 6574, Comorbilidad un trimestre(3) -0.56 [-1.48, 0.36], p= 0.503
6612, Un trimestre, TUS(4) 6268, TSM, 1 año después, TSM(1) -2.34 [-3.37, -1.31], p= <0.001
6522, Un semestre TSM(2) 6624, TSM, 1 año después, otras causas(6) 0.60 [-0.40, 1.60], p= 0.524
6522, Un semestre TSM(2) 6574, Comorbilidad un trimestre(3) 1.97 [0.94, 2.99], p= <0.001
6522, Un semestre TSM(2) 6268, TSM, 1 año después, TSM(1) 0.19 [-0.94, 1.32], p= 0.997
6624, TSM, 1 año después, otras causas(6) 6574, Comorbilidad un trimestre(3) 1.37 [0.26, 2.48], p= 0.006
6624, TSM, 1 año después, otras causas(6) 6268, TSM, 1 año después, TSM(1) -0.41 [-1.61, 0.79], p= 0.925
6574, Comorbilidad un trimestre(3) 6268, TSM, 1 año después, TSM(1) -1.78 [-3.00, -0.55], p= <0.001
Descartando valores negativos en sil width
1.2.3.h. Comparación covariables- Previsión
Código
tab_clus_prev_pam_om6_q<-
ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens %>%
    janitor::tabyl(prev_benef_rec_post, clus_pam_om6)

tab_clus_prev_pam_om6_q|>
   (\(df) {
     print(janitor::chisq.test(df))
     print(janitor::fisher.test(df, simulate.p.value = T, B = 1e5))
  })()
#X-squared = 42.542, df = 20, p-value = 0.002349
#p-value = 0.00173

tab_clus_prev_pam_om6_q|> 
  janitor::adorn_percentages("col") |> 
  janitor::adorn_rounding(digits = 3) |> 
  dplyr::mutate(across(-prev_benef_rec_post, ~sprintf("%d (%.1f%%)", tab_clus_prev_pam_om6_q[[cur_column()]],.*100))) |> 
  #dplyr::mutate_at(2:ncol(.),~scales::percent(.)) |> 
  mutate(prev_benef_rec_post = factor(prev_benef_rec_post, levels = c("ISAPRE", "FONASA D", "FONASA BC", "FONASA A", "FFAA")))|> 
  arrange(prev_benef_rec_post)|>
  (\(df) {
  if (interactive()) {mutate(df, across(-prev_benef_rec_post, ~ gsub("%", "", gsub("\\.", ",", .))))|> rio::export("clipboard")}
  knitr::kable(df, caption="Porcentajes por columna, conglomerado vs. Previsión")
  })()

    Pearson's Chi-squared test

data:  df
X-squared = 42.542, df = 20, p-value = 0.002349


    Fisher's Exact Test for Count Data with simulated p-value (based on
    1e+05 replicates)

data:  df
p-value = 0.00144
alternative hypothesis: two.sided
Porcentajes por columna, conglomerado vs. Previsión
prev_benef_rec_post 6623, Un trimestre, TSM(5) 6612, Un trimestre, TUS(4) 6522, Un semestre TSM(2) 6624, TSM, 1 año después, otras causas(6) 6574, Comorbilidad un trimestre(3) 6268, TSM, 1 año después, TSM(1)
ISAPRE 1258 (25.8%) 169 (22.7%) 89 (24.9%) 63 (26.4%) 46 (20.5%) 43 (24.7%)
FONASA D 567 (11.6%) 103 (13.8%) 40 (11.2%) 24 (10.0%) 28 (12.5%) 16 (9.2%)
FONASA BC 1558 (31.9%) 239 (32.0%) 111 (31.0%) 87 (36.4%) 87 (38.8%) 68 (39.1%)
FONASA A 1288 (26.4%) 222 (29.8%) 105 (29.3%) 61 (25.5%) 60 (26.8%) 45 (25.9%)
FFAA 214 (4.4%) 13 (1.7%) 13 (3.6%) 4 (1.7%) 3 (1.3%) 2 (1.1%)
Código
chisq_cramerv(tab_clus_prev_pam_om6_q[,-1])
# $chisq_statistic
# [1] "42.54"
# 
# $chisq_df
# df 
# 20 
# 
# $chisq_p_value
# [1] "0.0023"
# 
# $cramers_v
# [1] "0.04"
# 
fisher.test(with(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, table(prev_benef_rec_post, clus_pam_om6)), simulate=T, B=1e5)
# p-value = 0.00169

cat("Descartando valores negativos en sil width")
chisq_cramerv(with(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q), table(prev_benef_rec_post, clus_pam_om6)))
# $chisq_statistic
# [1] "35.74"
# 
# $chisq_df
# df 
# 20 
# 
# $chisq_p_value
# [1] "0.0165"
# 
# $cramers_v
# [1] "0.04"

cat("Fisher test para valores ASW negativos")
fisher.test(with(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q), table(prev_benef_rec_post, clus_pam_om6)), simulate=T, B=1e5)
#p-value = 0.01204
$chisq_statistic
[1] "42.54"

$chisq_df
df 
20 

$chisq_p_value
[1] "0.0023"

$cramers_v
[1] "0.04"


    Fisher's Exact Test for Count Data with simulated p-value (based on
    1e+05 replicates)

data:  with(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, table(prev_benef_rec_post, clus_pam_om6))
p-value = 0.00156
alternative hypothesis: two.sided

Descartando valores negativos en sil width$chisq_statistic
[1] "35.74"

$chisq_df
df 
20 

$chisq_p_value
[1] "0.0165"

$cramers_v
[1] "0.04"

Fisher test para valores ASW negativos
    Fisher's Exact Test for Count Data with simulated p-value (based on
    1e+05 replicates)

data:  with(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q), table(prev_benef_rec_post, clus_pam_om6))
p-value = 0.01224
alternative hypothesis: two.sided
Código
chisq.posthoc.test(tab_clus_prev_pam_om6_q[,-1])|>
  (\(df) dplyr::mutate(df, across(3:ncol(df), ~round(as.numeric(gsub("\\*","",.x)),3))))()|>
  # knitr::kable("html", caption="Comparación post-hoc, conglomerado-región") |>
  dplyr::group_by(Dimension)|>
  (\(df) dplyr::summarise(df, across(2:(ncol(df)-1), ~paste0(first(sprintf("%1.2f", .x)), " (p=", last(sprintf("%1.3f", .x)), ")"))))()|>
  (\(df) dplyr::mutate(df, across(2:length(names(df)), ~gsub("p=0.000)", "p<0.001)", .x))))()|> 
  dplyr::mutate(Dimension = dplyr::pull(tab_clus_prev_pam_om6_q[1]))|>
mutate(Dimension = factor(Dimension, levels = c("ISAPRE", "FONASA D", "FONASA BC", "FONASA A", "FFAA")))|> 
  arrange(Dimension)|>
  (\(df) {
  if (interactive()) {mutate(df, across(-Dimension, ~ gsub("\\(|\\)", "", gsub("\\.", ",", .))))|> rio::export("clipboard")}
  knitr::kable(df, caption="Comparación post-hoc, conglomerado-previsión")
  })()
Comparación post-hoc, conglomerado-previsión
Dimension 6623, Un trimestre, TSM(5) 6612, Un trimestre, TUS(4) 6522, Un semestre TSM(2) 6624, TSM, 1 año después, otras causas(6) 6574, Comorbilidad un trimestre(3) 6268, TSM, 1 año después, TSM(1)
ISAPRE 1.82 (p=1.000) -1.68 (p=1.000) -0.14 (p=1.000) 0.43 (p=1.000) -1.63 (p=1.000) -0.14 (p=1.000)
FONASA D -0.57 (p=1.000) 1.86 (p=1.000) -0.34 (p=1.000) -0.83 (p=1.000) 0.36 (p=1.000) -1.06 (p=1.000)
FONASA BC -1.61 (p=1.000) -0.25 (p=1.000) -0.60 (p=1.000) 1.33 (p=1.000) 2.08 (p=1.000) 1.89 (p=1.000)
FONASA A -1.58 (p=1.000) 1.88 (p=1.000) 1.07 (p=1.000) -0.48 (p=1.000) -0.03 (p=1.000) -0.31 (p=1.000)
FFAA 4.47 (p<0.001) -3.07 (p=0.064) -0.13 (p=1.000) -1.73 (p=1.000) -1.94 (p=1.000) -1.83 (p=1.000)
Código
pairwise_chisq_gof_test(tab_clus_prev_pam_om6_q[-1], p.adjust.method="holm")|> 
    knitr::kable("markdown", caption="Dependencia categórica sol. 4 conglomerados, por pares de categorías en Previsión (corrección Holm-Bonferroni)")
Dependencia categórica sol. 4 conglomerados, por pares de categorías en Previsión (corrección Holm-Bonferroni)
n group1 group2 statistic p df p.adj p.adj.signif
5631 6623, Un trimestre, TSM(5) 6612, Un trimestre, TUS(4) 19.0382198 0.000772 4 0.0116 *
5243 6623, Un trimestre, TSM(5) 6522, Un semestre TSM(2) 1.7752048 0.777000 4 1.0000 ns
5124 6623, Un trimestre, TSM(5) 6624, TSM, 1 año después, otras causas(6) 5.9453320 0.203000 4 1.0000 ns
5109 6623, Un trimestre, TSM(5) 6574, Comorbilidad un trimestre(3) 10.3182396 0.035400 4 0.4960 ns
5059 6623, Un trimestre, TSM(5) 6268, TSM, 1 año después, TSM(1) 7.7436944 0.101000 4 1.0000 ns
1104 6612, Un trimestre, TUS(4) 6522, Un semestre TSM(2) 5.5596504 0.235000 4 1.0000 ns
985 6612, Un trimestre, TUS(4) 6624, TSM, 1 año después, otras causas(6) 5.2224487 0.265000 4 1.0000 ns
970 6612, Un trimestre, TUS(4) 6574, Comorbilidad un trimestre(3) 3.6317932 0.458000 4 1.0000 ns
920 6612, Un trimestre, TUS(4) 6268, TSM, 1 año después, TSM(1) 5.7191438 0.221000 4 1.0000 ns
597 6522, Un semestre TSM(2) 6624, TSM, 1 año después, otras causas(6) 4.2316829 0.376000 4 1.0000 ns
582 6522, Un semestre TSM(2) 6574, Comorbilidad un trimestre(3) 6.7514257 0.150000 4 1.0000 ns
532 6522, Un semestre TSM(2) 6268, TSM, 1 año después, TSM(1) 5.7625216 0.218000 4 1.0000 ns
463 6624, TSM, 1 año después, otras causas(6) 6574, Comorbilidad un trimestre(3) 2.6269862 0.622000 4 1.0000 ns
413 6624, TSM, 1 año después, otras causas(6) 6268, TSM, 1 año después, TSM(1) 0.5684341 0.967000 4 1.0000 ns
398 6574, Comorbilidad un trimestre(3) 6268, TSM, 1 año después, TSM(1) 1.7926252 0.774000 4 1.0000 ns
1.2.3.i. Comparación covariables- Niv. Complejidad
Código
tab_clus_compl_pam_om6_q<-
ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens |> 
  dplyr::inner_join(data_long_establecimiento_2024_std[,c("ESTAB_HOMO", "codigo_region", "nivel_de_atencion", "nivel_de_complejidad")], 
                    by = c("estab_homo_base" = "ESTAB_HOMO"), multiple = "first") |> 
  janitor::tabyl(nivel_de_complejidad, clus_pam_om6) 

tab_clus_compl_pam_om6_q|> 
  janitor::adorn_percentages("col")|> 
  janitor::adorn_rounding(digits = 3)|> 
   dplyr::mutate(across(-nivel_de_complejidad, ~sprintf("%d (%.1f%%)", tab_clus_compl_pam_om6_q[[cur_column()]],.*100)))|> 
  mutate(nivel_de_complejidad = factor(nivel_de_complejidad, levels = c("Alta Complejidad", "Mediana Complejidad", "Baja Complejidad", "Pendiente", "Sin dato")))|> 
  arrange(nivel_de_complejidad)|>
  (\(df) {
  if (interactive()) {mutate(df, across(-nivel_de_complejidad, ~ gsub("%", "", gsub("\\.", ",", .))))|> rio::export("clipboard")}
  knitr::kable(df, caption="Tabla de contingencia, Niv. de complejidad (proporción por columna)")
  })()
Tabla de contingencia, Niv. de complejidad (proporción por columna)
nivel_de_complejidad 6623, Un trimestre, TSM(5) 6612, Un trimestre, TUS(4) 6522, Un semestre TSM(2) 6624, TSM, 1 año después, otras causas(6) 6574, Comorbilidad un trimestre(3) 6268, TSM, 1 año después, TSM(1)
Alta Complejidad 2976 (60.9%) 506 (67.8%) 177 (49.4%) 151 (63.2%) 165 (73.7%) 108 (62.1%)
Mediana Complejidad 962 (19.7%) 85 (11.4%) 91 (25.4%) 38 (15.9%) 37 (16.5%) 40 (23.0%)
Baja Complejidad 793 (16.2%) 143 (19.2%) 66 (18.4%) 45 (18.8%) 20 (8.9%) 15 (8.6%)
Pendiente 123 (2.5%) 5 (0.7%) 19 (5.3%) 1 (0.4%) 2 (0.9%) 10 (5.7%)
Sin dato 31 (0.6%) 7 (0.9%) 5 (1.4%) 4 (1.7%) 0 (0.0%) 1 (0.6%)
Código
tab_clus_compl_pam_om6_q |> 
  janitor::fisher.test(simulate.p.value=T, B=1e5)
#p-value = 1e-05


chisq_cramerv(tab_clus_compl_pam_om6_q[,-1])
# $chisq_statistic
# [1] "117.74"
# 
# $chisq_df
# df 
# 20 
# 
# $chisq_p_value
# [1] "<0.001"
# 
# $cramers_v
# [1] "0.07"

message("Descartando valores negativos en sil width")
chisq_cramerv(with(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q) |> 
  dplyr::inner_join(data_long_establecimiento_2024_std[,c("ESTAB_HOMO", "codigo_region", "nivel_de_atencion", "nivel_de_complejidad")], 
  by = c("estab_homo_base" = "ESTAB_HOMO"), multiple = "first"), table(nivel_de_complejidad, clus_pam_om6)))
# $chisq_statistic
# [1] "118.72"
# 
# $chisq_df
# df 
# 20 
# 
# $chisq_p_value
# [1] "<0.001"
# 
# $cramers_v
# [1] "0.07"

fisher.test(with(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus4_q) |> 
  dplyr::inner_join(data_long_establecimiento_2024_std[,c("ESTAB_HOMO", "codigo_region", "nivel_de_atencion", "nivel_de_complejidad")], by = c("estab_homo_base" = "ESTAB_HOMO"), multiple = "first"), table(nivel_de_complejidad, clus_pam_om4)), simulate.p.value = T, B=1e5)
#p-value = 1e-05

cat("Para post-hoc convendría consultar https://adaptivedesignstrial.shinyapps.io/posthoc/")

chisq.posthoc.test(tab_clus_compl_pam_om6_q[-1])|> 
  (\(df) dplyr::mutate(df, across(3:ncol(df), ~round(as.numeric(gsub("\\*","",.x)),3))))()|>
  # knitr::kable("html", caption="Comparación post-hoc, conglomerado-región") |>
  (\(df) dplyr::group_by(df, Dimension))()|>
  (\(df) dplyr::summarise(df, across(2:(ncol(df) - 1), ~paste0(first(sprintf("%1.2f", .x)), " (p=", last(sprintf("%1.3f", .x)), ")"))))()|>
  (\(df) dplyr::mutate(df, across(2:length(names(df)), ~gsub("p=0.000)", "p<0.001)",.x))))()|>
  ungroup()|> 
  dplyr::mutate(Dimension = dplyr::pull(tab_clus_compl_pam_om6_q[1]))|>
  mutate(Dimension = factor(Dimension, levels = c("Alta Complejidad", "Mediana Complejidad", "Baja Complejidad", "Pendiente", "Sin dato")))|> 
  arrange(Dimension)|>
  (\(df) {
    if (interactive()) {mutate(df, across(-Dimension, ~ gsub("\\(|\\)", "", gsub("\\.", ",", .))))|> rio::export("clipboard")}
    knitr::kable(df, "markdown", caption="Comparación post-hoc, conglomerado-Niv. complejidad")
  })() 
  
pairwise_chisq_gof_test(tab_clus_compl_pam_om6_q[-1], p.adjust.method="holm")|> 
    knitr::kable("markdown", caption="Dependencia categórica sol. 4 conglomerados, por pares de categorías en Niv. Complejidad (corrección Holm-Bonferroni)")

    Fisher's Exact Test for Count Data with simulated p-value (based on
    1e+05 replicates)

data:  tab_clus_compl_pam_om6_q
p-value = 1e-05
alternative hypothesis: two.sided

$chisq_statistic
[1] "117.74"

$chisq_df
df 
20 

$chisq_p_value
[1] "<0.001"

$cramers_v
[1] "0.07"

$chisq_statistic
[1] "118.72"

$chisq_df
df 
20 

$chisq_p_value
[1] "<0.001"

$cramers_v
[1] "0.07"


    Fisher's Exact Test for Count Data with simulated p-value (based on
    1e+05 replicates)

data:  with(dplyr::inner_join(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus4_q), data_long_establecimiento_2024_std[, c("ESTAB_HOMO", "codigo_region", "nivel_de_atencion", "nivel_de_complejidad")], by = c(estab_homo_base = "ESTAB_HOMO"), multiple = "first"), table(nivel_de_complejidad, clus_pam_om4))
p-value = 1e-05
alternative hypothesis: two.sided

Para post-hoc convendría consultar https://adaptivedesignstrial.shinyapps.io/posthoc/
Comparación post-hoc, conglomerado-Niv. complejidad
Dimension 6623, Un trimestre, TSM(5) 6612, Un trimestre, TUS(4) 6522, Un semestre TSM(2) 6624, TSM, 1 año después, otras causas(6) 6574, Comorbilidad un trimestre(3) 6268, TSM, 1 año después, TSM(1)
Alta Complejidad -1.96 (p=1.000) 3.70 (p=0.006) -4.87 (p<0.001) 0.50 (p=1.000) 3.77 (p=0.005) 0.12 (p=1.000)
Mediana Complejidad 2.73 (p=0.193) -5.57 (p<0.001) 3.23 (p=0.037) -1.21 (p=1.000) -0.93 (p=1.000) 1.39 (p=1.000)
Baja Complejidad -0.35 (p=1.000) 2.23 (p=0.778) 1.11 (p=1.000) 1.06 (p=1.000) -3.05 (p=0.069) -2.79 (p=0.159)
Pendiente 0.92 (p=1.000) -3.29 (p=0.029) 3.67 (p=0.007) -2.05 (p=1.000) -1.51 (p=1.000) 2.90 (p=0.111)
Sin dato -1.44 (p=1.000) 0.73 (p=1.000) 1.54 (p=1.000) 1.76 (p=1.000) -1.30 (p=1.000) -0.24 (p=1.000)
Dependencia categórica sol. 4 conglomerados, por pares de categorías en Niv. Complejidad (corrección Holm-Bonferroni)
n group1 group2 statistic p df p.adj p.adj.signif
5631 6623, Un trimestre, TSM(5) 6612, Un trimestre, TUS(4) 42.923820 0.00e+00 4 1.00e-07 ****
5243 6623, Un trimestre, TSM(5) 6522, Un semestre TSM(2) 26.145837 2.96e-05 4 3.26e-04 ***
5124 6623, Un trimestre, TSM(5) 6624, TSM, 1 año después, otras causas(6) 10.560313 3.20e-02 4 6.40e-02 ns
5109 6623, Un trimestre, TSM(5) 6574, Comorbilidad un trimestre(3) 17.673277 1.43e-03 4 1.14e-02 *
5059 6623, Un trimestre, TSM(5) 6268, TSM, 1 año después, TSM(1) 13.727923 8.22e-03 4 4.17e-02 *
1104 6612, Un trimestre, TUS(4) 6522, Un semestre TSM(2) 67.530563 0.00e+00 4 0.00e+00 ****
985 6612, Un trimestre, TUS(4) 6624, TSM, 1 año después, otras causas(6) 4.604678 3.30e-01 4 3.30e-01 ns
970 6612, Un trimestre, TUS(4) 6574, Comorbilidad un trimestre(3) 17.413628 1.61e-03 4 1.14e-02 *
920 6612, Un trimestre, TUS(4) 6268, TSM, 1 año después, TSM(1) 46.320808 0.00e+00 4 0.00e+00 ****
597 6522, Un semestre TSM(2) 6624, TSM, 1 año después, otras causas(6) 21.244064 2.83e-04 4 2.55e-03 **
582 6522, Un semestre TSM(2) 6574, Comorbilidad un trimestre(3) 37.715976 1.00e-07 4 1.50e-06 ****
532 6522, Un semestre TSM(2) 6268, TSM, 1 año después, TSM(1) 11.917623 1.80e-02 4 5.40e-02 ns
463 6624, TSM, 1 año después, otras causas(6) 6574, Comorbilidad un trimestre(3) 14.111154 6.95e-03 4 4.17e-02 *
413 6624, TSM, 1 año después, otras causas(6) 6268, TSM, 1 año después, TSM(1) 21.660420 2.34e-04 4 2.34e-03 **
398 6574, Comorbilidad un trimestre(3) 6268, TSM, 1 año después, TSM(1) 12.989195 1.13e-02 4 4.52e-02 *
Código
pairwise_chisq_gof_test(tab_clus_compl_pam_om6_q[-1], p.adjust.method="holm")|> 
    knitr::kable("markdown", caption="Dependencia categórica sol. 7 conglomerados, por pares de categorías en Niv. Complejidad (corrección Holm-Bonferroni)")
Dependencia categórica sol. 7 conglomerados, por pares de categorías en Niv. Complejidad (corrección Holm-Bonferroni)
n group1 group2 statistic p df p.adj p.adj.signif
5631 6623, Un trimestre, TSM(5) 6612, Un trimestre, TUS(4) 42.923820 0.00e+00 4 1.00e-07 ****
5243 6623, Un trimestre, TSM(5) 6522, Un semestre TSM(2) 26.145837 2.96e-05 4 3.26e-04 ***
5124 6623, Un trimestre, TSM(5) 6624, TSM, 1 año después, otras causas(6) 10.560313 3.20e-02 4 6.40e-02 ns
5109 6623, Un trimestre, TSM(5) 6574, Comorbilidad un trimestre(3) 17.673277 1.43e-03 4 1.14e-02 *
5059 6623, Un trimestre, TSM(5) 6268, TSM, 1 año después, TSM(1) 13.727923 8.22e-03 4 4.17e-02 *
1104 6612, Un trimestre, TUS(4) 6522, Un semestre TSM(2) 67.530563 0.00e+00 4 0.00e+00 ****
985 6612, Un trimestre, TUS(4) 6624, TSM, 1 año después, otras causas(6) 4.604678 3.30e-01 4 3.30e-01 ns
970 6612, Un trimestre, TUS(4) 6574, Comorbilidad un trimestre(3) 17.413628 1.61e-03 4 1.14e-02 *
920 6612, Un trimestre, TUS(4) 6268, TSM, 1 año después, TSM(1) 46.320808 0.00e+00 4 0.00e+00 ****
597 6522, Un semestre TSM(2) 6624, TSM, 1 año después, otras causas(6) 21.244064 2.83e-04 4 2.55e-03 **
582 6522, Un semestre TSM(2) 6574, Comorbilidad un trimestre(3) 37.715976 1.00e-07 4 1.50e-06 ****
532 6522, Un semestre TSM(2) 6268, TSM, 1 año después, TSM(1) 11.917623 1.80e-02 4 5.40e-02 ns
463 6624, TSM, 1 año después, otras causas(6) 6574, Comorbilidad un trimestre(3) 14.111154 6.95e-03 4 4.17e-02 *
413 6624, TSM, 1 año después, otras causas(6) 6268, TSM, 1 año después, TSM(1) 21.660420 2.34e-04 4 2.34e-03 **
398 6574, Comorbilidad un trimestre(3) 6268, TSM, 1 año después, TSM(1) 12.989195 1.13e-02 4 4.52e-02 *
Código
#dput(attr(t(tab_clus_compl_pam_om7_q),"dimnames")[[1]])

# Definir los datos correctamente
data_pam_om7_q <-cbind.data.frame(
  Grupo= c("6035, Un trimestre, TSM(6)", "6025, Un trimestre, TUS(5)", 
"5939, Un semestre TSM(3)", "5989, Comorbilidad un trimestre(4)", 
"6036, TSM, 1 año después, otras causas(7)", "5710, TSM, 1 año después, TSM(1)", 
"5935, TSM, 6 meses después, TSM(2)"), 
      PPOO_bin            = c(NA, NA, NA, NA, NA, NA, NA), 
      PPOO_sinautoid          = c(NA, NA, NA, NA, NA, NA, NA), 
      PPOO_conautoid          = c(NA, NA, NA, NA, NA, NA, NA), 
      Mortalidad              = c(NA, NA, NA, NA, NA, NA, NA), 
      RM                      = c(NA, "-", NA, "+", NA, NA, NA), 
      `Macrozona-Austral`       = c(NA, NA, NA, NA, NA, NA, NA), 
      `Macrozona-Centro`        = c(NA, NA, NA, NA, NA, NA, NA), 
      `Macrozona-Centro Sur`    = c(NA, NA, NA, NA, NA, NA, NA), 
      `Macrozona-Norte`        = c("+","-", NA, NA, NA, NA, NA), 
      `Macrozona-Sur`         = c("-", "+", NA, NA, NA, NA, NA), 
      Sexo_mujeres             = c("+", "-", NA, "-", NA, NA, "+"), 
      `Edad ingreso`         = c(NA, "+", "-", "+", NA, NA, "-"), 
      `Previsión-FFAA`         = c(NA, NA, NA, NA, NA, NA, NA), 
      `Previsión-FONASA A`     = c(NA, NA, NA, NA, NA, NA, NA), 
      `Previsión-FONASA BC`     = c(NA, NA, NA, NA, NA, NA, NA), 
      `Previsión-FONASA D`     = c(NA, NA, NA, NA, NA, NA, NA), 
      `Previsión-ISAPRE`     = c(NA, NA, NA, NA, NA, NA, NA), 
      `NivComp-Baja`     = c(NA, NA, NA, NA, NA, NA, NA), 
      `NivComp-Media`     = c(NA, "-", "+", NA, NA, NA, NA), 
      `NivComp-Alta`     = c(NA, "+", "-", NA, NA, NA, NA))
#
# Asegurar que los nombres de las columnas sean válidos y no haya espacios en blanco
# Derretir el dataframe para que sea adecuado para ggplot2
data_melt_pam_om7_q <- reshape2::melt(data_pam_om7_q, id.vars = 'Grupo', variable.name = 'Variable', value.name = 'Asociación')

# Reemplazar los NA por un valor vacío
data_melt_pam_om7_q$Asociación[is.na(data_melt_pam_om7_q$Asociación)] <- "\n"

# Crear el gráfico con ggplot
data_melt_pam_om7_q|>
  dplyr::mutate(Variable = gsub("_", " ", Variable))|>
ggplot(aes(x = Variable, y = Grupo, fill = Asociación)) +
  geom_tile(color = "white", size = 0.8) +
  scale_fill_manual(values = c("+" = "#556B2F", "-" = "#E2725B", "\n" = "white")) +
  labs(title =NULL, x = "Variables", y = "Conglomerado") +
  theme_minimal() +
  theme(#axis.text.x = element_text(angle = 45, hjust = 1),
        panel.grid = element_blank())+
  theme(
    axis.text.y = element_text(size = 17, face = "bold"),#,margin = margin(l = 7)),           # Tamaño de las etiquetas de los grupos étnicos
    axis.text.x = element_text(size = 17, face = "bold", angle = 45, hjust = 1),           # Tamaño de las etiquetas del eje X
    axis.title.x = element_text(size = 16, face = "bold"),#,margin = margin(t = -15)),          # Tamaño del título del eje X
    axis.title.y = element_text(size = 16, face = "bold"),          # Tamaño del título del eje Y
    plot.title = NULL,  # Tamaño y estilo del título del gráfico
    legend.title = element_text(size = 17, face = "bold"),          # Tamaño del título de la leyenda
    legend.spacing.y = unit(1.5, "lines"),
    legend.box.spacing = unit(0.5, "lines"),      # Controla el espacio entre la leyenda y el gráfico
    legend.margin = margin(5, 5, 5, 5),  
    legend.key.height = unit(1, "cm"),  
    legend.text = element_text(size = 15, face = "bold")            # Tamaño del texto de la leyenda
  ) +
  coord_flip()
ggsave("_figs/asociaciones_pam_om7_q.png", width=8.8*.8, height=5*.8, dpi=1000)


Información de la sesión

Código
cat(paste0("R library: ", Sys.getenv("R_LIBS_USER")))
R library: C:\Users\andre\AppData\Local/R/win-library/4.4
Código
cat(paste0("Date: ",withr::with_locale(new = c('LC_TIME' = 'C'), code =Sys.time())))
Date: 2025-05-15 15:21:32.603686
Código
cat(paste0("Editor context: ", getwd()))
Editor context: H:/My Drive/PERSONAL ANDRES/UCH_salud_publica/asignaturas/un_inv_II
Código
cat("quarto version: "); system("quarto --version") 
quarto version: 
[1] 0
Código
save.image("avance250117_2_25.RData")
Código
sesion_info <- devtools::session_info()
Warning in system2("quarto", "-V", stdout = TRUE, env = paste0("TMPDIR=", : el
comando ejecutado '"quarto"
TMPDIR=C:/Users/andre/AppData/Local/Temp/Rtmpugzt8Z/file84b43b4e2f68 -V' tiene
el estatus 1
Código
dplyr::select(
  tibble::as_tibble(sesion_info$packages),
  c(package, loadedversion, source)
)|>
 knitr::kable(caption = "R packages", format = "html",
      col.names = c("Row number", "Package", "Version"),
    row.names = FALSE,
      align = c("c", "l", "r"))|>
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)|>
  kableExtra::scroll_box(width = "100%", height = "375px")  
R packages
Row number Package Version
abind 1.4-8 CRAN (R 4.4.1)
backports 1.5.0 CRAN (R 4.4.1)
biostat3 0.2.2 CRAN (R 4.4.3)
boot 1.3-31 CRAN (R 4.4.1)
broom 1.0.7 CRAN (R 4.4.1)
cachem 1.1.0 CRAN (R 4.4.1)
car 3.1-3 CRAN (R 4.4.1)
carData 3.0-5 CRAN (R 4.4.1)
chisq.posthoc.test 0.1.3 Github (ebbertd/chisq.posthoc.test@186d2ca6bbdba9fc19601aff4696ae1b85e7e0b0)
cli 3.6.4 CRAN (R 4.4.1)
cluster 2.1.8.1 CRAN (R 4.4.1)
coda 0.19-4.1 CRAN (R 4.4.1)
codetools 0.2-20 CRAN (R 4.4.1)
colorspace 2.1-1 CRAN (R 4.4.1)
cowplot 1.1.3 CRAN (R 4.4.1)
crayon 1.5.3 CRAN (R 4.4.1)
curl 6.2.1 CRAN (R 4.4.1)
data.table 1.17.0 CRAN (R 4.4.1)
devtools 2.4.5 CRAN (R 4.4.1)
DiagrammeR 1.0.11 CRAN (R 4.4.1)
DiagrammeRsvg 0.1 CRAN (R 4.4.1)
digest 0.6.37 CRAN (R 4.4.1)
doFuture 1.0.1 CRAN (R 4.4.1)
doParallel 1.0.17 CRAN (R 4.4.1)
dplyr 1.1.4 CRAN (R 4.4.3)
ellipsis 0.3.2 CRAN (R 4.4.1)
emmeans 1.11.0 CRAN (R 4.4.3)
epitools 0.5-10.1 CRAN (R 4.4.0)
estimability 1.5.1 CRAN (R 4.4.1)
evaluate 1.0.3 CRAN (R 4.4.1)
expsmooth 2.3 CRAN (R 4.4.3)
factoextra 1.0.7 CRAN (R 4.4.1)
farver 2.1.2 CRAN (R 4.4.1)
fastcluster 1.2.6 CRAN (R 4.4.1)
fastmap 1.2.0 CRAN (R 4.4.1)
fma 2.5 CRAN (R 4.4.3)
forcats 1.0.0 CRAN (R 4.4.1)
foreach 1.5.2 CRAN (R 4.4.1)
forecast 8.24.0 CRAN (R 4.4.3)
Formula 1.2-5 CRAN (R 4.4.1)
fpp2 2.5 CRAN (R 4.4.3)
fracdiff 1.5-3 CRAN (R 4.4.1)
fs 1.6.5 CRAN (R 4.4.1)
future 1.34.0 CRAN (R 4.4.1)
future.apply 1.11.3 CRAN (R 4.4.1)
generics 0.1.3 CRAN (R 4.4.1)
ggh4x 0.3.0 CRAN (R 4.4.1)
ggplot2 3.5.2 CRAN (R 4.4.3)
ggpubr 0.6.0 CRAN (R 4.4.1)
ggrepel 0.9.6 CRAN (R 4.4.1)
ggseqplot 0.8.5 CRAN (R 4.4.1)
ggsignif 0.6.4 CRAN (R 4.4.1)
globals 0.16.3 CRAN (R 4.4.1)
glue 1.8.0 CRAN (R 4.4.1)
gridExtra 2.3 CRAN (R 4.4.1)
gtable 0.3.6 CRAN (R 4.4.1)
gtsummary 2.2.0 CRAN (R 4.4.3)
haven 2.5.4 CRAN (R 4.4.1)
hms 1.1.3 CRAN (R 4.4.1)
htmltools 0.5.8.1 CRAN (R 4.4.1)
htmlwidgets 1.6.4 CRAN (R 4.4.1)
httpuv 1.6.15 CRAN (R 4.4.1)
iterators 1.0.14 CRAN (R 4.4.1)
janitor 2.2.1 CRAN (R 4.4.1)
job 0.3.1 CRAN (R 4.4.1)
jsonlite 1.9.1 CRAN (R 4.4.1)
kableExtra 1.4.0 CRAN (R 4.4.1)
km.ci 0.5-6 CRAN (R 4.4.3)
KMsurv 0.1-5 CRAN (R 4.4.0)
knitr 1.49 CRAN (R 4.4.1)
labeling 0.4.3 CRAN (R 4.4.1)
later 1.4.1 CRAN (R 4.4.1)
lattice 0.22-6 CRAN (R 4.4.1)
lifecycle 1.0.4 CRAN (R 4.4.1)
listenv 0.9.1 CRAN (R 4.4.1)
lmtest 0.9-40 CRAN (R 4.4.1)
lubridate 1.9.4 CRAN (R 4.4.1)
magrittr 2.0.3 CRAN (R 4.4.1)
MASS 7.3-60.2 CRAN (R 4.4.1)
Matrix 1.7-0 CRAN (R 4.4.1)
memoise 2.0.1 CRAN (R 4.4.1)
mgcv 1.9-1 CRAN (R 4.4.1)
mime 0.12 CRAN (R 4.4.1)
miniUI 0.1.1.1 CRAN (R 4.4.1)
mnormt 2.1.1 CRAN (R 4.4.1)
multcomp 1.4-28 CRAN (R 4.4.1)
munsell 0.5.1 CRAN (R 4.4.1)
mvtnorm 1.3-3 CRAN (R 4.4.1)
NbClust 3.0.1 CRAN (R 4.4.1)
nlme 3.1-164 CRAN (R 4.4.1)
nnet 7.3-19 CRAN (R 4.4.1)
pacman 0.5.1 CRAN (R 4.4.3)
parallelly 1.42.0 CRAN (R 4.4.1)
patchwork 1.3.0 CRAN (R 4.4.1)
permute 0.9-7 CRAN (R 4.4.1)
pillar 1.10.1 CRAN (R 4.4.1)
pkgbuild 1.4.6 CRAN (R 4.4.1)
pkgconfig 2.0.3 CRAN (R 4.4.1)
pkgload 1.4.0 CRAN (R 4.4.1)
plyr 1.8.9 CRAN (R 4.4.1)
profvis 0.4.0 CRAN (R 4.4.1)
progressr 0.15.1 CRAN (R 4.4.1)
promises 1.3.2 CRAN (R 4.4.1)
psych 2.4.12 CRAN (R 4.4.1)
purrr 1.0.4 CRAN (R 4.4.1)
quadprog 1.5-8 CRAN (R 4.4.1)
quantmod 0.4.26 CRAN (R 4.4.1)
R.methodsS3 1.8.2 CRAN (R 4.4.1)
R.oo 1.27.0 CRAN (R 4.4.1)
R.utils 2.13.0 CRAN (R 4.4.1)
R6 2.6.1 CRAN (R 4.4.1)
ragg 1.3.3 CRAN (R 4.4.1)
rbibutils 2.3 CRAN (R 4.4.1)
RColorBrewer 1.1-3 CRAN (R 4.4.0)
Rcpp 1.0.14 CRAN (R 4.4.1)
Rdpack 2.6.2 CRAN (R 4.4.1)
readr 2.1.5 CRAN (R 4.4.3)
remotes 2.5.0 CRAN (R 4.4.1)
reshape2 1.4.4 CRAN (R 4.4.1)
rio 1.2.3 CRAN (R 4.4.1)
rlang 1.1.5 CRAN (R 4.4.1)
rmarkdown 2.29 CRAN (R 4.4.1)
rstatix 0.7.2 CRAN (R 4.4.1)
rstudioapi 0.17.1 CRAN (R 4.4.1)
rsvg 2.6.2 CRAN (R 4.4.3)
sandwich 3.1-1 CRAN (R 4.4.1)
scales 1.3.0 CRAN (R 4.4.1)
sessioninfo 1.2.3 CRAN (R 4.4.1)
shiny 1.10.0 CRAN (R 4.4.1)
snakecase 0.11.1 CRAN (R 4.4.1)
stargazer 5.2.3 CRAN (R 4.4.1)
stringi 1.8.4 CRAN (R 4.4.1)
stringr 1.5.1 CRAN (R 4.4.3)
survival 3.6-4 CRAN (R 4.4.1)
survminer 0.5.0 CRAN (R 4.4.3)
survMisc 0.5.6 CRAN (R 4.4.3)
svglite 2.1.3 CRAN (R 4.4.1)
systemfonts 1.2.1 CRAN (R 4.4.1)
textshaping 1.0.0 CRAN (R 4.4.1)
TH.data 1.1-3 CRAN (R 4.4.1)
tibble 3.2.1 CRAN (R 4.4.1)
tidyr 1.3.1 CRAN (R 4.4.1)
tidyselect 1.2.1 CRAN (R 4.4.1)
tidyverse 2.0.0 CRAN (R 4.4.3)
timechange 0.3.0 CRAN (R 4.4.1)
timeDate 4041.110 CRAN (R 4.4.1)
Tmisc 1.0.1 CRAN (R 4.4.1)
TraMineR 2.2-11 CRAN (R 4.4.1)
TraMineRextras 0.6.8 CRAN (R 4.4.1)
tseries 0.10-58 CRAN (R 4.4.1)
TTR 0.24.4 CRAN (R 4.4.1)
tzdb 0.4.0 CRAN (R 4.4.1)
urca 1.3-4 CRAN (R 4.4.1)
urlchecker 1.0.1 CRAN (R 4.4.1)
usethis 3.1.0 CRAN (R 4.4.1)
utf8 1.2.4 CRAN (R 4.4.1)
V8 6.0.1 CRAN (R 4.4.1)
vctrs 0.6.5 CRAN (R 4.4.1)
vegan 2.6-10 CRAN (R 4.4.1)
vegclust 2.0.2 CRAN (R 4.4.1)
viridisLite 0.4.2 CRAN (R 4.4.1)
visNetwork 2.1.2 CRAN (R 4.4.1)
WeightedCluster 1.8-1 CRAN (R 4.4.1)
withr 3.0.2 CRAN (R 4.4.1)
writexl 1.5.1 CRAN (R 4.4.1)
xfun 0.51 CRAN (R 4.4.1)
xml2 1.3.7 CRAN (R 4.4.1)
xtable 1.8-4 CRAN (R 4.4.1)
xts 0.14.1 CRAN (R 4.4.1)
yaml 2.3.10 CRAN (R 4.4.1)
zoo 1.8-13 CRAN (R 4.4.1)
Código
reticulate::py_list_packages()|>
 knitr::kable(caption = "Python packages", format = "html",
      col.names = c("Package", "Version", "Requirement"),
    row.names = FALSE,
      align = c("c", "l", "r", "r"))|>
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)|>
  kableExtra::scroll_box(width = "100%", height = "375px")  
Error in path.expand(path): argumento 'path' inválido